﻿/*
* SunriseSpell - A Chinese pinyin library
*
* Copyright (C) 2004 mic <mic4free@hotmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* In case your copy of SunriseSpell does not include a copy of the license, you may find it online at 
* http://www.gnu.org/copyleft/gpl.html
*/

using System;
using System.Text;


namespace eTerm.ASynClientSDK.Utils {

    /// <summary>
    /// 提供用于设置转换选项的枚举值。
    /// </summary>
    /// <value>
    /// <code>FirstLetterOnly</code>
    /// 只转换拼音首字母，默认转换全部
    /// </value>
    /// <value>
    /// <code>TranslateUnknowWordToInterrogation</code>
    /// 转换未知汉字为问号，默认不转换
    /// </value>
    /// <value>
    /// <code>EnableUnicodeLetter</code>
    /// 保留非字母、非数字字符，默认不保留
    /// </value>
    [System.FlagsAttribute]
    public enum SpellOptions {
        FirstLetterOnly = 1,								// 只转换拼音首字母，默认转换全部
        TranslateUnknowWordToInterrogation = 1 << 1,		// 转换未知汉字为问号，默认不转换
        EnableUnicodeLetter = 1 << 2,						// 保留非字母、非数字字符，默认不保留
        FirstLetterUpper = 1 << 4,							// 首字母大写，默认小写
    }

    /// <summary>
    /// 汉字转拼音算法
    /// </summary>
    public static class Cn2PyUtil {
        #region 字段和属性

        //拼音代码表
        readonly static string[] _spellMusicCode = new string[]{
            "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao",
            "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo",
            "bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai",
            "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu",
            "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu",
            "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de",
            "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du",
            "duan", "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang",
            "fei", "fen", "feng", "fu", "fou", "ga", "gai", "gan", "gang", "gao",
            "ge", "ji", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan",
            "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he",
            "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang",
            "hui", "hun", "huo", "jia", "jian", "jiang", "qiao", "jiao", "jie", "jin",
            "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan",
            "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai",
            "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao",
            "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin",
            "ling", "liu", "long", "lou", "lu", "luan", "lue", "lun", "luo", "ma",
            "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian",
            "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai",
            "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang",
            "niao", "nie", "nin", "ning", "niu", "nong", "nu", "nuan", "nue", "yao",
            "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen",
            "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu",
            "qi", "qia", "qian", "qiang", "qie", "qin", "qing", "qiong", "qiu", "qu",
            "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri",
            "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa", "sai", "san",
            "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao",
            "she", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang",
            "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun",
            "suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", "ti", "tian",
            "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo",
            "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi",
            "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu",
            "xuan", "xue", "xun", "ya", "yan", "yang", "ye", "yi", "yin", "ying",
            "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan",
            "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang",
            "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai",
            "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan",
            "zui", "zun", "zuo", "", "ei", "m", "n", "dia", "cen", "nou",
            "jv", "qv", "xv", "lv", "nv"
        };

        //拼音索引表
        readonly static int[,] _spellCodeIndex = new int[,]{
		    {354,279,331,0,190,39,284,67,249,167,353,19,133,92,129,152,31,385,105,131,84,348,348,329,133,0,376,116,283,349,344,87,133,0,0,0,284,202,0,0,0,0,0,0,342,345,0,276,199,243,0,0,52,0,375,102,88,176,170,348,136,180,375,0,354,294,299,94,344,368,344,55,347,333,131,347,353,369,166,74,325,92,0,329,6,19,0,306,0,332,372,114,107,20,33,370,279,258,79,191,243,328,220,83,43,324,62,376,229,354,64,73,329,348,336,92,2,349,232,282,84,305,389,357,134,332,343,336,363,332,217,208,335,340,377,389,13,232,348,294,348,374,107,181,378,21,250,14,371,47,346,369,14,332,250,284,10,121,110,333,91,78,194,19,113,123,102,251,47,337,282,320,106,157,348,101,349,189,340,3,175,77,178,29,37,343,377,263,125,294,56},
		    {302,214,130,132,313,373,393,39,404,134,286,313,282,320,20,201,334,318,354,330,340,101,148,329,348,84,167,122,350,332,270,229,330,190,331,339,62,134,375,157,294,123,334,125,16,309,81,344,11,354,336,116,374,375,19,133,220,389,167,323,169,43,387,0,91,310,286,187,304,383,337,237,241,88,167,299,245,80,375,387,178,295,171,122,68,386,12,329,134,200,23,125,347,276,245,350,36,243,264,376,45,325,354,19,309,345,83,305,328,75,34,283,140,62,29,11,367,120,220,369,388,345,353,340,367,47,84,84,375,190,92,348,335,343,294,71,368,373,315,11,360,245,325,296,375,297,331,355,261,217,357,126,180,63,305,109,129,330,278,243,252,35,40,270,11,334,352,220,304,301,346,78,19,333,359,97,270,162,352,362,387,231,295,381,354,368,389,279,43,131,107},
		    {370,247,349,62,335,174,11,234,130,166,175,182,243,332,304,350,68,392,278,127,132,318,392,240,160,32,101,241,308,381,325,92,20,121,45,312,278,220,82,332,354,75,170,20,97,332,332,193,347,130,242,127,83,377,2,269,348,137,216,304,348,58,150,0,125,40,128,276,359,24,18,3,303,59,30,158,348,130,243,188,329,214,248,208,32,169,404,152,10,354,16,360,375,294,353,109,247,246,164,308,325,173,40,31,333,311,335,164,179,360,221,305,345,179,202,360,338,265,265,316,32,208,208,130,345,284,0,0,0,0,282,69,0,0,120,329,265,167,354,107,310,0,92,348,184,254,345,184,367,132,98,132,184,377,96,340,353,140,348,189,284,188,134,147,193,84,335,189,303,89,116,226,84,193,242,125,296,186,316,97,131,247,68,88,349,2,164,25,194,384,52},
		    {294,74,130,170,330,70,79,79,134,40,374,83,198,375,83,83,139,88,237,150,107,258,43,92,243,53,92,57,323,136,164,84,250,64,193,171,376,17,129,129,278,31,94,43,153,74,77,129,47,131,69,179,363,355,54,0,276,43,54,164,81,31,241,0,43,386,89,240,74,247,385,125,92,345,123,74,375,329,98,283,125,367,139,244,42,31,381,175,164,231,278,147,98,117,367,385,166,134,172,102,128,102,125,125,314,92,125,125,375,31,390,196,164,378,344,131,145,335,375,348,378,196,160,135,147,346,321,334,197,152,129,169,0,131,90,193,37,159,352,0,135,247,175,21,157,139,190,68,340,329,348,343,346,283,168,175,234,284,92,244,128,251,333,348,342,79,135,314,134,57,181,343,343,404,164,34,333,251,357,133,10,0,14,87,87,348,231,134,220,91,75},
		    {95,55,133,95,203,133,348,126,141,116,250,79,245,361,152,116,354,102,121,57,153,166,166,298,70,133,250,330,143,345,250,343,209,389,284,330,323,323,335,278,92,288,152,330,335,254,346,248,280,37,340,330,153,92,75,330,270,345,372,107,344,62,368,0,227,0,245,344,375,183,309,281,313,391,81,363,355,164,63,246,5,102,345,164,32,243,164,345,345,355,114,190,262,250,0,162,70,381,282,282,282,348,56,285,136,6,267,284,385,331,334,92,357,265,48,98,249,37,0,114,192,183,341,386,74,347,223,123,348,39,246,335,239,117,114,354,221,342,263,223,90,137,404,91,326,241,329,128,357,37,283,319,326,75,284,135,230,326,197,254,62,284,377,312,330,348,241,237,386,340,348,334,344,250,332,320,239,17,84,346,123,303,55,321,393,21,302,332,123,241,77},
		    {75,375,378,343,334,149,284,311,397,341,322,160,314,338,353,189,209,337,0,109,357,173,239,183,389,110,332,160,238,167,6,192,404,299,84,107,356,353,97,97,11,107,348,243,316,345,323,164,249,34,362,344,69,241,62,246,0,114,0,0,167,159,276,0,0,328,349,241,321,244,3,363,209,354,310,157,330,2,400,385,368,358,334,333,384,329,326,309,97,241,241,57,347,386,316,52,110,344,241,372,167,332,350,98,363,104,179,0,62,251,320,0,305,3,57,354,372,377,30,322,0,360,220,190,116,357,119,355,92,376,325,276,340,120,367,345,167,354,271,139,127,345,278,230,300,351,325,350,0,11,0,362,123,309,220,334,244,273,352,114,335,180,29,106,263,321,92,227,329,332,386,175,321,0,301,0,269,0,199,244,14,5,166,391,378,196,304,128,38,128,139},
		    {304,282,2,334,174,334,116,121,104,340,332,363,32,238,60,180,116,86,305,347,269,128,334,117,181,254,334,334,92,153,334,109,396,127,340,320,304,343,329,392,79,139,121,24,43,358,57,354,319,330,241,109,166,340,121,349,343,220,294,345,350,55,369,0,385,216,356,335,127,355,2,352,325,354,230,59,336,73,58,336,232,349,391,214,62,158,302,328,331,347,74,339,377,368,130,32,343,185,375,175,121,228,353,220,349,351,186,114,372,164,172,106,202,196,345,164,175,173,196,57,35,236,232,333,185,330,74,148,345,31,350,0,156,302,334,46,119,123,381,372,334,367,164,31,30,164,348,179,360,297,0,365,125,358,378,158,212,0,0,121,349,213,317,141,355,132,233,357,48,121,75,104,314,316,104,253,260,104,303,104,349,122,107,178,104,44,325,355,251,148,240},
		    {355,355,344,317,316,316,317,177,121,348,176,176,344,316,313,240,175,150,344,384,297,297,385,58,242,331,278,212,196,124,375,343,348,246,186,261,319,82,14,337,158,131,92,62,337,226,305,250,385,98,303,132,346,0,175,249,96,342,6,171,378,84,116,0,375,5,0,228,193,92,110,404,47,37,349,115,72,371,84,101,220,74,102,29,346,335,285,19,114,55,138,58,108,3,337,332,9,239,11,348,349,107,340,383,246,83,80,252,352,137,331,62,159,135,246,372,169,117,21,132,347,62,344,251,299,374,323,134,178,374,146,279,68,304,23,315,13,332,74,348,375,384,241,134,208,143,154,208,125,89,354,344,97,163,80,344,154,3,282,203,316,36,119,14,166,328,381,10,354,329,129,264,347,94,387,354,120,75,220,84,92,186,279,320,349,83,376,129,130,113,89},
		    {45,332,237,162,337,120,71,323,341,330,92,150,350,352,139,297,284,189,327,36,316,252,376,164,231,9,361,72,373,329,374,343,373,2,95,345,140,326,335,172,106,159,279,231,13,35,175,175,223,243,186,196,381,290,174,16,27,375,370,140,63,35,385,0,92,104,244,246,62,52,345,302,366,243,325,383,127,278,278,81,240,318,317,79,252,73,392,62,283,121,74,304,61,329,82,120,304,55,347,378,125,354,244,127,144,348,232,63,126,347,342,304,158,134,118,58,255,243,343,332,330,2,344,59,264,130,404,152,175,345,304,325,121,173,173,265,164,170,31,343,345,162,6,323,270,382,348,181,378,382,116,154,116,340,154,285,183,73,285,348,350,126,227,368,15,299,253,171,54,341,335,203,331,355,323,375,247,0,96,241,188,188,35,363,136,90,306,303,345,14,0},
		    {357,335,6,76,309,228,135,335,63,346,119,139,367,12,120,81,64,343,145,5,327,303,329,5,126,166,74,357,126,284,82,123,14,176,74,313,243,133,218,29,332,79,92,114,57,353,131,129,326,376,224,145,376,357,232,37,356,382,345,201,336,82,83,0,355,70,20,385,371,208,355,315,341,375,75,196,14,282,75,110,340,78,374,193,8,84,171,386,254,332,346,182,386,134,258,68,92,87,333,123,135,96,125,125,209,375,373,332,113,101,343,149,345,194,169,229,344,353,345,332,309,321,251,295,114,332,280,283,335,183,84,329,143,157,50,313,337,201,354,238,299,375,107,382,237,318,332,354,345,329,330,345,354,294,164,134,383,241,332,385,68,175,75,75,404,190,48,239,134,23,171,334,286,241,121,84,328,328,304,81,81,310,208,251,131,131,243,63,337,116,323},
		    {157,349,377,203,84,178,0,154,349,344,134,164,63,332,117,117,346,220,201,267,124,354,354,325,309,262,186,57,264,247,121,328,243,45,191,84,129,71,348,376,120,190,345,350,341,129,325,374,249,375,335,320,166,184,254,294,233,325,321,50,116,245,10,0,340,354,102,388,220,355,261,263,172,186,226,357,180,153,282,373,355,301,261,194,350,297,211,306,227,159,203,10,232,348,354,341,355,348,141,352,208,391,130,381,363,201,160,372,116,116,5,264,180,235,97,329,127,320,369,191,332,332,196,168,166,117,102,61,375,340,348,117,330,153,220,345,31,128,186,84,79,345,348,111,128,84,284,299,244,166,341,336,211,68,348,24,2,210,214,180,311,39,130,47,354,236,261,263,208,345,303,350,243,356,190,14,282,337,208,70,172,355,158,345,171,128,255,158,332,350,290},
		    {335,251,189,164,176,345,378,158,136,386,336,294,303,353,381,343,192,48,323,344,348,386,164,342,20,200,212,350,176,261,248,316,262,220,348,131,384,378,114,284,348,311,330,36,253,95,334,367,284,282,120,189,147,23,360,355,249,110,373,125,214,19,119,0,246,284,214,130,214,375,354,10,151,214,404,246,116,375,214,282,325,335,151,121,137,348,348,10,246,173,10,83,404,72,238,381,238,0,346,381,343,378,72,59,129,189,189,286,279,196,168,332,332,154,353,211,227,324,324,324,220,74,153,376,88,97,380,88,88,330,14,129,310,64,284,373,335,208,330,0,182,174,237,335,81,335,404,28,335,134,136,168,136,378,335,238,321,332,164,345,59,121,173,258,329,107,282,40,0,356,8,220,4,329,129,92,82,323,243,241,129,393,393,346,134,89,342,238,164,311,389},
		    {84,320,232,5,152,250,238,311,171,37,237,0,9,314,342,15,110,143,179,75,212,65,175,76,77,87,251,348,198,284,3,325,119,189,164,92,314,325,353,97,169,220,128,75,347,21,253,83,203,164,353,332,261,59,282,36,316,94,90,331,349,354,202,0,140,345,252,38,302,170,117,134,157,193,154,154,389,97,344,89,178,178,171,74,374,349,68,107,374,325,232,129,389,148,68,349,386,363,120,354,346,83,249,346,309,348,375,284,75,378,369,404,345,186,107,92,119,313,329,354,387,158,143,345,345,325,387,29,301,143,246,309,316,72,330,327,25,305,350,129,139,172,329,127,13,63,243,352,212,54,284,267,295,387,126,168,141,31,65,399,66,316,174,369,369,5,26,250,244,391,391,59,59,330,354,232,173,333,374,20,246,128,345,160,369,168,168,246,74,392,127},
		    {136,220,128,220,136,369,348,342,203,347,347,348,212,345,92,335,143,330,62,5,391,325,261,59,171,129,354,356,349,263,129,169,330,173,173,350,330,134,31,350,325,345,203,251,33,51,176,63,63,212,345,345,345,203,345,150,120,337,33,169,0,240,240,0,249,375,371,348,130,300,251,0,238,358,66,212,82,224,375,116,57,56,321,84,196,348,348,237,242,135,263,288,291,127,373,284,253,56,102,237,370,270,323,56,276,241,70,115,374,340,325,348,9,237,65,95,226,306,189,124,308,121,376,282,16,104,363,198,9,131,31,375,329,14,14,370,189,127,31,82,188,9,59,192,40,129,332,158,125,19,88,92,313,363,101,185,246,319,344,336,129,382,344,47,314,348,375,311,375,334,316,102,148,188,353,21,19,36,157,92,295,286,247,354,191,296,363,333,81,133,75},
		    {325,172,331,296,375,21,247,133,133,174,349,330,175,348,40,316,294,336,191,32,329,81,152,0,150,14,273,170,168,404,92,350,332,313,352,164,313,345,62,238,121,200,121,82,250,345,361,348,77,270,77,284,64,116,329,318,126,6,282,370,306,84,62,0,33,373,348,251,280,355,131,64,370,126,244,231,14,281,304,125,91,78,14,147,125,17,334,304,104,244,114,208,104,323,136,92,175,121,121,348,348,348,356,356,326,345,354,37,64,352,234,37,385,348,92,376,324,62,171,84,324,330,324,374,375,131,48,375,48,0,92,375,387,377,157,335,129,125,309,331,233,84,325,227,330,374,234,309,60,375,17,376,34,220,121,186,173,333,10,250,161,258,313,87,258,107,348,303,330,79,350,326,326,329,92,330,129,323,48,354,284,52,303,384,246,122,338,324,332,141,134},
		    {348,10,193,229,147,8,215,369,116,389,353,62,318,353,84,330,14,353,341,48,19,120,342,232,286,330,304,352,196,0,284,330,160,113,152,197,375,335,220,65,109,325,340,334,294,149,249,121,37,348,338,99,170,37,279,381,356,231,60,121,334,183,352,0,355,232,356,354,354,143,372,170,128,245,309,21,243,330,187,348,113,36,329,164,167,48,348,164,203,75,329,48,60,32,187,164,100,100,241,146,310,178,330,140,103,208,73,104,369,355,130,92,170,354,110,251,304,309,212,46,187,336,329,301,387,125,352,60,203,357,312,45,248,27,15,122,387,309,11,341,325,91,325,14,341,119,190,352,241,305,349,336,184,242,143,2,245,345,264,387,294,350,252,114,357,297,241,220,295,120,92,97,134,43,208,335,139,374,352,26,343,282,20,330,335,122,352,346,164,272,306},
		    {349,340,303,357,194,95,48,234,198,104,37,24,24,24,52,193,370,314,5,290,100,252,362,133,166,223,295,246,349,404,279,317,182,332,281,247,62,375,404,135,241,241,354,237,168,295,353,38,375,314,36,241,250,231,11,248,128,37,166,237,153,121,374,0,349,349,330,330,57,304,74,319,297,136,27,334,79,82,160,160,332,193,168,329,24,136,50,332,304,283,232,348,332,216,57,304,131,295,128,325,341,246,246,134,272,144,350,348,170,273,137,118,2,347,155,331,37,354,349,56,188,208,188,72,241,196,332,187,39,375,221,40,346,20,375,152,152,353,84,172,192,36,121,31,158,118,341,255,31,92,134,119,281,166,201,196,305,136,382,382,356,91,125,68,65,23,124,375,153,369,244,91,125,354,353,330,369,330,330,250,116,116,75,348,309,184,63,279,348,348,345},
		    {249,164,79,263,359,370,356,354,329,107,282,367,348,241,329,0,258,330,246,124,354,5,372,375,375,0,345,324,15,134,326,116,356,246,282,374,357,323,265,239,239,6,215,363,357,19,375,201,240,220,373,367,346,242,208,347,37,232,124,186,250,40,344,0,369,228,199,243,320,7,375,134,155,242,243,112,213,95,392,348,335,273,121,7,375,155,74,74,216,373,110,128,68,263,169,367,175,281,136,169,134,344,332,354,345,20,94,309,36,301,243,186,216,134,231,125,345,299,335,367,83,148,249,123,316,239,363,296,354,385,323,375,392,380,368,175,296,345,9,325,323,246,281,193,187,84,59,328,251,356,387,310,316,12,328,393,331,241,36,272,178,247,89,62,122,241,286,323,171,344,374,167,98,348,340,345,374,23,19,309,388,144,285,129,194,94,188,272,231,221,125},
		    {374,353,243,345,201,341,232,325,269,212,284,387,373,343,352,15,346,119,345,390,340,242,92,309,156,156,35,133,316,122,93,68,334,335,243,367,11,220,325,0,329,387,93,96,246,261,252,388,300,300,261,231,143,220,59,375,221,335,249,332,130,192,348,0,72,278,302,367,238,164,306,148,375,321,331,326,244,310,373,75,221,251,367,329,372,141,261,277,300,301,168,38,43,104,231,375,241,296,166,36,37,100,175,174,387,330,116,379,244,305,117,375,244,102,350,127,375,212,182,31,223,40,297,381,128,278,243,234,126,220,96,243,92,235,160,73,332,267,102,365,348,343,36,334,114,101,302,209,170,374,325,142,92,26,336,304,78,34,136,334,12,196,385,325,240,246,73,117,128,302,220,379,166,352,202,175,385,368,240,46,330,58,273,247,129,150,278,335,367,5,134},
		    {347,75,188,189,92,303,59,158,134,347,263,347,347,208,328,129,18,214,91,375,375,305,196,125,335,169,304,7,296,175,356,256,375,346,162,268,286,51,209,332,229,164,157,119,350,179,173,243,243,243,158,332,350,186,278,350,51,335,372,179,186,196,37,0,390,176,304,277,63,321,305,128,158,179,102,102,241,343,142,348,107,8,238,63,147,193,329,110,27,285,104,340,128,35,373,74,354,7,340,74,212,63,252,348,143,345,241,315,334,74,346,331,193,378,2,62,373,286,168,250,338,348,128,278,128,385,348,166,14,303,334,334,342,241,241,136,368,0,8,354,158,325,283,124,124,354,128,315,69,375,244,250,369,385,385,385,246,170,385,40,71,378,129,108,229,353,0,241,232,172,84,80,131,371,348,280,125,0,375,79,234,79,369,150,299,354,92,92,123,335,311},
		    {350,62,340,31,346,284,193,193,384,45,329,11,8,129,283,116,80,132,341,82,246,116,345,363,80,282,134,346,80,341,238,373,171,109,196,15,340,122,387,331,81,348,326,68,2,19,4,173,152,311,284,120,341,153,340,128,130,375,314,114,87,333,107,0,137,332,154,377,330,283,372,372,107,109,323,310,385,391,377,278,208,330,241,374,348,345,323,170,32,324,334,81,341,348,357,121,340,193,347,350,286,325,247,184,201,158,346,45,220,301,240,128,139,109,327,32,241,109,345,164,92,187,360,335,109,196,48,208,370,121,107,341,42,168,304,131,235,170,330,348,129,120,56,347,347,164,304,314,334,81,282,371,109,348,333,337,278,128,10,131,345,2,347,263,188,164,35,152,65,0,220,123,404,261,173,179,176,277,305,345,378,0,348,116,286,26,283,366,243,340,155},
		    {349,245,82,232,82,171,148,0,405,311,159,391,194,324,319,241,350,387,324,314,159,160,173,0,286,0,258,6,74,311,164,249,133,14,373,47,263,243,354,329,343,79,386,258,372,74,183,37,348,91,95,375,126,278,323,133,183,375,355,81,68,332,45,0,286,117,336,215,39,295,356,130,92,184,232,4,82,348,84,201,116,347,378,336,220,75,371,357,391,283,74,175,295,201,373,303,330,99,84,196,348,347,347,284,212,14,348,208,156,110,226,79,376,56,47,350,84,286,280,295,282,254,352,375,389,57,97,240,5,84,84,393,17,367,294,378,229,284,99,29,220,133,172,186,164,261,362,0,352,343,241,373,348,333,373,164,273,140,19,258,7,258,19,386,39,348,47,392,391,77,77,354,78,95,369,164,349,375,284,84,263,348,148,248,271,342,74,44,354,360,0},
		    {350,129,172,369,343,268,373,11,350,155,131,238,12,265,330,159,172,83,241,326,137,107,349,249,353,173,231,382,62,342,316,362,353,14,62,107,375,258,11,332,119,323,221,124,311,92,334,404,151,399,82,295,294,69,246,350,134,154,385,31,325,131,164,0,19,331,0,306,375,157,166,385,164,241,19,178,295,243,241,23,31,372,81,229,239,122,36,362,169,354,354,97,103,68,89,324,54,79,36,369,241,355,345,354,251,348,282,330,385,297,157,388,388,82,35,247,212,323,175,109,245,377,134,134,36,393,244,344,232,385,386,18,231,66,40,32,187,117,125,102,330,59,102,63,375,251,0,84,94,231,278,348,282,74,84,325,325,124,387,125,348,330,345,345,369,354,110,328,233,14,220,149,340,267,346,156,345,12,121,153,129,153,294,83,320,375,198,184,148,116,313},
		    {354,353,295,355,346,373,233,347,242,347,292,354,325,186,309,92,129,262,120,161,251,333,284,304,357,282,40,232,124,348,373,84,221,189,97,130,302,220,335,355,386,194,297,124,220,129,120,107,243,180,355,261,284,375,326,313,261,305,368,294,283,143,330,0,97,241,142,300,226,306,91,45,373,400,92,129,244,332,186,340,89,385,320,127,346,63,124,375,59,173,271,330,92,166,121,352,243,104,87,87,317,117,282,391,231,353,126,116,119,102,348,348,90,141,102,102,323,375,382,357,159,35,387,164,339,247,290,314,100,363,297,162,175,167,189,404,128,297,143,16,175,168,372,367,286,182,211,346,311,231,378,276,251,125,48,92,345,342,375,343,375,391,48,240,286,117,153,373,278,330,45,63,81,196,329,256,170,172,127,332,266,79,369,160,357,292,318,36,305,188,334},
		    {136,336,121,92,221,320,214,265,314,366,82,248,345,113,246,97,172,160,90,330,283,386,270,92,69,131,125,40,55,286,126,170,203,349,121,278,391,341,36,88,134,391,348,240,83,121,58,92,299,237,36,40,379,121,92,129,124,368,125,244,59,348,16,0,295,281,164,349,306,303,190,241,317,19,123,92,243,208,214,348,90,140,349,264,247,345,241,189,371,102,45,92,153,238,61,40,91,190,353,375,120,243,162,169,268,175,164,51,404,192,121,223,404,375,90,70,355,356,81,385,296,166,126,40,247,378,404,345,164,378,246,129,75,297,118,212,354,173,157,128,332,0,134,339,171,350,278,349,353,350,333,216,20,369,166,134,290,281,391,48,251,250,25,0,354,179,164,390,176,305,136,345,158,158,378,179,164,6,202,354,171,101,348,332,340,33,330,241,143,349,136},
		    {330,340,331,153,159,336,296,335,340,41,349,243,336,243,42,98,349,354,334,347,346,304,253,223,116,334,119,340,230,348,334,340,0,166,40,348,75,354,46,119,21,21,134,243,375,273,37,273,376,301,299,164,363,354,164,153,75,372,326,196,220,283,340,0,136,242,249,297,247,348,347,347,24,187,65,373,357,326,39,309,130,279,349,64,133,153,51,57,70,126,166,18,70,125,125,378,283,348,335,252,127,220,343,121,252,241,250,121,71,348,334,100,186,2,129,232,31,0,0,232,169,124,269,198,320,343,77,261,332,134,249,221,0,229,134,74,14,270,184,299,286,320,143,302,270,286,198,184,314,261,369,272,369,188,175,65,136,241,346,205,18,282,330,330,247,344,68,346,357,374,19,58,291,161,208,79,249,224,363,190,64,385,42,323,79,56,320,183,353,236,243},
		    {354,354,316,133,375,375,243,131,131,319,137,114,251,15,107,376,227,342,120,353,340,340,357,345,57,353,116,123,405,196,329,38,227,14,375,226,386,358,172,363,83,186,358,320,373,373,348,78,310,294,152,350,134,348,124,376,121,12,363,378,353,97,116,0,237,386,375,297,36,294,134,342,283,342,84,92,100,57,349,377,347,121,359,36,325,115,125,294,77,337,84,386,375,349,329,142,0,345,309,197,162,348,189,251,238,334,348,297,152,245,134,237,338,375,120,194,329,250,348,131,284,0,31,130,169,249,325,107,183,353,20,69,114,348,374,158,107,164,94,166,45,114,348,314,160,331,38,132,299,36,229,332,282,154,237,107,247,258,316,334,313,75,357,164,291,294,162,291,70,357,113,337,306,46,370,202,355,320,68,328,134,281,167,122,302,245,60,135,116,104,345},
		    {377,231,109,32,243,80,37,175,134,164,372,237,310,354,208,175,189,131,171,178,250,354,282,116,116,355,157,247,243,375,349,238,12,355,326,267,81,355,143,241,281,273,241,232,330,355,262,119,125,218,329,313,83,328,309,325,264,27,110,345,114,189,184,0,350,345,247,283,186,359,122,200,102,37,75,166,241,241,186,310,49,325,24,193,238,340,92,125,83,348,349,284,335,374,304,354,14,193,284,316,283,352,134,314,317,249,249,346,173,123,355,201,226,353,251,382,167,31,345,384,110,386,187,350,156,83,174,325,331,350,238,130,345,301,355,332,220,188,385,36,303,302,321,147,272,367,284,178,180,325,359,329,326,244,363,284,2,357,349,297,301,284,2,226,340,327,25,192,91,342,120,335,62,375,350,129,91,299,128,121,349,363,290,45,334,354,339,116,14,16,375},
		    {126,147,282,279,189,5,175,340,353,31,79,352,103,187,247,354,92,344,33,330,92,175,173,130,104,295,375,87,244,128,48,45,381,223,308,347,330,189,305,305,304,166,321,303,88,231,386,141,231,370,382,340,155,243,345,290,334,52,309,126,387,350,114,0,336,286,119,387,154,340,375,235,286,127,238,346,121,129,329,224,92,325,334,243,344,330,300,73,193,266,297,373,387,348,375,323,304,349,335,347,367,270,111,14,31,286,240,170,325,273,273,36,132,117,203,160,53,114,107,357,172,114,84,109,110,332,125,278,330,354,175,214,354,170,283,58,119,363,335,354,284,342,171,323,386,352,150,24,166,63,347,341,373,182,57,348,299,232,134,302,246,385,216,328,246,230,273,276,325,40,302,295,313,273,378,166,208,330,286,189,214,350,350,188,130,241,241,391,328,306,349},
		    {349,72,47,123,247,158,343,143,325,18,97,243,350,18,155,81,25,185,360,325,238,360,175,164,353,346,175,294,375,350,70,324,121,335,226,282,16,31,196,172,125,273,36,97,18,123,332,175,246,261,164,131,334,350,299,325,322,342,378,290,157,72,79,0,116,157,286,171,350,208,92,166,392,350,170,348,125,31,56,255,125,158,79,290,355,385,83,281,162,158,48,250,352,243,78,136,345,350,332,360,176,345,164,189,278,304,58,128,31,350,109,378,158,158,202,323,176,343,332,345,88,345,354,101,334,334,121,114,381,367,335,37,359,241,376,82,215,326,240,348,232,139,226,345,227,198,168,101,336,101,101,15,55,331,374,378,143,371,84,6,335,335,171,385,228,303,346,314,278,325,120,377,220,340,113,251,119,339,339,332,349,344,377,220,284,325,314,342,359,139,331},
		    {341,374,238,121,101,34,121,35,0,169,84,132,335,240,313,385,313,106,159,345,340,37,261,116,330,286,123,343,148,356,334,330,382,250,62,335,241,0,404,345,134,170,154,122,319,330,52,329,114,134,84,328,48,83,237,248,267,348,248,336,348,127,354,0,89,232,350,324,283,98,280,0,0,94,325,35,110,153,376,331,357,83,166,337,128,14,350,378,325,317,278,330,341,218,31,345,132,132,186,325,367,130,248,262,119,79,249,299,346,169,129,362,98,357,201,284,167,96,305,33,357,20,347,335,330,329,357,110,334,348,357,200,278,248,220,189,243,350,329,95,345,244,14,16,387,175,125,174,231,299,348,314,136,387,116,348,375,325,172,254,223,257,132,154,51,366,125,330,330,348,334,37,120,57,347,343,345,343,334,137,61,319,282,127,82,330,354,170,314,280,82},
		    {343,158,186,305,348,132,187,131,0,350,348,342,158,303,24,330,252,387,243,121,378,171,354,348,335,371,121,55,0,19,264,334,343,130,39,306,220,110,158,16,261,169,196,267,404,169,5,343,152,356,168,164,175,136,168,345,330,335,173,347,24,255,356,0,158,48,314,100,134,34,189,305,158,378,158,171,354,371,374,228,36,325,107,136,347,389,189,43,143,361,65,244,352,244,226,33,125,43,354,367,190,226,20,43,353,70,36,215,161,320,258,183,80,89,345,361,11,294,353,91,198,368,251,251,386,183,145,243,164,239,89,375,12,251,45,124,83,143,134,40,330,11,179,129,180,270,325,184,73,314,127,330,164,70,169,225,234,20,330,39,325,256,39,6,92,30,385,110,141,229,115,344,349,119,382,152,376,198,232,134,348,337,348,171,232,208,220,353,342,57,20},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {148,332,341,196,371,129,343,278,302,314,160,385,330,331,11,375,345,276,107,131,225,81,334,232,241,16,349,157,125,244,154,345,387,375,374,344,169,0,387,0,83,328,355,278,317,344,335,124,233,353,220,300,238,194,296,180,355,56,354,284,109,244,348,0,373,25,109,182,126,198,31,5,90,52,82,14,14,120,240,170,354,382,220,330,334,285,0,128,91,341,70,121,150,332,332,214,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {123,263,188,169,353,131,285,175,302,332,189,255,203,179,332,241,136,220,386,175,297,249,86,161,6,114,62,42,88,354,241,354,32,114,329,84,129,344,187,9,356,136,357,136,349,57,236,244,348,88,237,84,341,49,96,124,280,47,254,283,282,348,389,0,172,14,373,130,128,125,164,101,332,377,345,339,346,340,297,246,349,343,10,333,331,102,38,340,229,160,58,350,326,75,313,309,329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {329,36,137,186,11,313,332,40,107,341,345,341,339,84,330,171,164,130,301,83,323,63,236,369,273,193,354,157,193,324,354,310,40,229,36,75,32,13,175,251,64,229,244,385,246,78,130,70,129,122,354,186,45,341,309,337,56,262,193,125,325,264,119,0,335,42,125,381,346,166,251,71,344,120,172,284,261,301,220,326,329,373,130,350,180,306,172,164,159,310,244,54,136,371,18,316,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {154,381,48,348,241,131,362,249,5,166,187,349,117,325,329,61,339,366,343,250,58,170,168,248,297,102,131,79,130,172,92,121,131,2,362,58,128,103,304,150,119,273,299,310,40,354,130,175,233,286,391,158,330,386,341,264,328,87,162,70,164,375,262,0,164,360,341,309,102,299,156,173,175,164,158,350,330,333,325,100,59,360,347,20,228,375,164,0,333,0,8,230,80,57,0,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {116,348,0,135,32,37,0,58,188,383,237,15,377,0,47,350,241,332,174,62,223,381,170,329,57,327,350,345,310,107,32,247,282,31,31,265,297,282,175,83,367,84,237,66,384,188,14,172,300,172,198,357,84,94,129,84,310,198,0,126,321,84,201,0,198,198,92,310,87,14,55,375,177,226,348,117,354,354,198,137,348,172,65,117,58,383,126,36,32,319,162,29,172,65,170,126,39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {232,65,65,245,57,286,375,200,14,89,377,331,340,35,342,241,344,52,14,387,342,375,78,375,81,134,278,212,308,314,129,354,121,304,37,186,131,334,316,183,334,298,240,74,285,348,231,370,100,180,170,92,310,347,37,232,193,72,143,344,50,282,376,0,375,354,83,346,35,316,104,326,119,148,349,136,330,100,348,43,162,0,63,370,282,50,348,387,296,273,64,174,404,246,84,293,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {172,160,332,81,304,349,110,332,100,325,216,354,325,352,162,164,286,57,170,170,17,92,37,346,129,374,185,164,123,157,92,341,350,349,352,304,63,179,176,176,20,0,6,78,78,245,92,362,184,224,47,171,196,92,231,90,75,107,14,39,243,2,334,0,109,120,109,363,52,109,334,347,109,128,2,337,120,179,234,110,128,88,228,249,252,367,97,137,137,377,367,0,371,70,241,350,11,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,224,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10},
		    {371,110,110,20,323,354,79,84,249,59,175,369,164,130,340,140,341,3,404,340,377,58,3,97,164,88,324,241,355,332,336,330,83,193,194,284,357,226,80,186,332,284,350,374,220,282,123,55,373,152,340,282,186,196,378,373,284,65,208,386,33,80,226,0,173,314,375,62,204,194,343,373,346,196,376,196,186,334,107,119,36,380,135,75,182,332,330,154,278,310,178,323,163,284,248,169,374,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,232,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,18,18,19,19,19,19,19,19,19},
		    {164,157,391,135,232,122,175,363,377,354,122,180,331,337,121,103,359,45,125,186,115,341,310,340,78,328,102,189,327,147,58,310,248,196,82,363,370,348,69,147,196,292,48,404,37,187,102,119,292,330,240,282,168,34,332,347,342,329,325,125,347,2,121,0,125,371,186,39,272,214,343,220,356,188,190,236,190,162,152,341,190,123,175,188,173,251,182,330,305,140,378,246,354,293,385,136,282,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,20,21,21,21,21,21,21,21,21,21,22,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,25,25,25,25,25,26,26,26,26,26,27,27,27,27,27,28,28,29,29,29,29,29,29,29,29,29,29,29,30,30,30,31,31,31,31,31,31,31,31,31,31,32,32},
		    {115,350,377,128,366,356,6,66,241,386,329,372,242,244,57,136,164,84,326,75,141,375,129,236,75,372,299,321,130,196,389,354,179,320,75,198,378,217,237,171,240,161,75,238,352,152,145,251,378,152,75,242,175,325,2,349,345,237,160,114,247,325,127,0,0,247,252,31,159,114,354,334,331,183,179,352,34,34,345,276,154,97,0,117,175,35,219,295,385,145,345,383,146,36,241,387,247,32,32,32,370,32,32,32,32,32,32,32,33,33,33,33,33,33,33,33,33,34,34,34,34,34,34,35,35,35,35,35,35,35,35,35,35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37,37,37,284,37,37,37,37,37,37,37,37,37,37,37,37,38,38,38,38,38,39,39,39,39,39,39,39,39,39,39,39,39,40,40,40,40,40,40,40,40,40,40},
		    {170,137,226,193,369,110,330,163,349,329,241,178,203,264,345,66,320,350,143,325,293,373,71,331,58,309,203,310,241,73,83,252,252,180,95,335,75,172,309,305,143,232,325,310,344,241,166,325,357,383,156,0,220,381,31,241,127,231,172,175,140,43,35,0,349,162,234,241,378,52,387,46,178,92,278,160,366,125,330,66,63,226,358,127,62,164,125,330,370,127,332,354,383,127,143,363,162,40,40,40,40,40,40,41,42,42,42,42,42,42,42,43,43,382,43,43,43,44,44,44,44,44,45,45,45,45,45,45,45,46,33,47,47,47,47,47,47,47,47,47,47,47,47,48,48,48,48,48,48,49,50,50,50,50,51,51,51,52,52,52,52,52,52,52,52,53,53,53,54,54,54,54,54,54,55,55,55,55,55,55,56,56,56,56,56,56,56,56,56,56,56},
		    {129,40,347,252,58,348,232,232,354,236,241,348,143,125,354,264,228,47,20,346,180,336,152,162,162,375,164,179,79,252,228,350,164,173,173,196,290,100,158,22,345,259,356,302,180,335,220,375,80,72,376,0,348,284,353,375,311,84,189,298,186,30,404,0,354,329,378,102,331,375,90,90,291,130,282,87,154,62,306,97,100,391,171,175,59,375,14,40,121,353,349,386,123,373,355,329,332,56,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,58,58,58,58,58,59,59,59,59,59,59,59,59,59,59,59,59,60,60,60,61,61,61,61,61,61,61,62,62,62,62,62,62,62,62,368,62,62,62,62,62,62,62,62,62,62,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,64,64,64,64,64,64,64,64,311,65,65,65,65,65,65,65},
		    {346,375,348,186,294,62,11,373,352,92,90,305,294,180,302,84,341,241,354,241,294,304,57,102,299,164,216,332,59,164,356,375,360,162,262,335,316,258,386,199,375,332,209,249,82,184,357,375,131,375,354,148,8,232,208,164,353,232,20,171,209,393,375,0,134,123,314,375,155,110,349,386,375,258,70,378,216,240,90,363,320,154,88,131,309,316,344,178,175,97,393,384,9,241,375,154,163,66,66,66,66,66,66,66,66,66,67,68,68,68,68,68,68,68,68,68,68,69,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,70,70,70,70,70,70,71,71,71,71,71,71,72,72,72,72,73,73,73,73,73,319,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,76,77,77,77,77,77,77,77},
		    {231,170,391,354,297,0,348,330,15,92,84,232,221,129,376,387,340,36,59,332,386,354,340,375,142,97,261,299,261,92,141,278,189,375,92,175,297,92,350,326,249,0,348,120,245,92,334,240,128,385,376,391,404,299,216,273,121,255,221,354,236,386,318,0,326,36,123,152,404,228,273,385,164,360,344,354,282,131,220,160,220,10,19,321,378,228,64,329,321,43,220,334,36,147,57,385,340,77,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,80,80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,0,85,84,84,84,84,84,84,84,84,84,84,84,84,84},
		    {297,100,385,328,321,347,248,220,220,311,33,310,64,174,168,330,329,153,43,371,151,151,36,52,168,362,51,127,248,70,362,173,245,40,284,84,243,40,114,241,109,283,82,191,250,378,171,207,19,7,294,114,373,64,348,286,131,250,237,164,381,28,61,0,53,322,131,140,131,161,231,37,183,378,323,128,298,246,344,383,355,108,130,232,348,68,278,331,378,199,97,245,193,10,278,229,171,84,84,84,84,84,84,84,84,84,84,84,240,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,86,86,87,87,87,87,87,87,88,88,88,88,88,88,88,88,88,88,88,89,89,89,89,89,89,89,89,89,90,90,90,90,90,90,90,90,90,90,91,91,91,91,91,91,91,91,91,91,91,105,91,91,91,91,91,0,93,93,94,94,94,94},
		    {217,84,79,88,79,284,184,334,248,193,179,102,250,37,349,220,14,155,128,357,263,92,108,376,157,58,27,84,316,164,159,134,100,332,107,352,331,375,36,298,378,393,313,124,90,88,152,357,222,334,240,157,388,225,232,91,303,99,354,125,371,116,374,0,367,377,175,170,253,84,367,97,243,137,383,27,389,20,341,15,300,332,237,337,116,348,356,45,404,329,68,334,92,129,337,186,79,94,94,94,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,98,98,98,98,98,98,99,99,99,100,100,100,100,100,100,100,100,100,100,100,101,101,101,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,103,103,103,104,104,104,104,104,104,105},
		    {71,83,378,114,245,249,191,243,97,284,357,110,305,356,39,267,374,212,243,334,173,231,70,385,40,284,378,244,173,125,21,121,14,378,48,345,360,390,232,234,354,381,368,277,104,348,116,31,147,237,362,92,404,92,209,301,51,64,301,161,167,334,20,0,189,294,305,168,57,84,125,193,153,56,128,381,160,334,175,284,360,241,225,241,232,88,134,175,175,345,58,269,379,96,243,166,284,106,106,106,106,106,106,106,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,12,108,108,109,109,109,109,109,109,109,109,109,110,110,110,110,110,110,110,110,110,110,196,110,110,110,110,110,110,110,111,111,112,112,112,112,113,113,113,113,113,114,114,114,114,114,114,114,114,114,115,115,115,115,115,115,115,116,116,116,116,116,116,116,116,116,116,116},
		    {158,153,354,356,109,373,303,309,212,306,348,241,308,381,377,226,296,377,243,385,308,175,175,125,320,350,354,157,173,245,166,158,243,356,376,250,166,15,71,390,164,284,179,350,356,385,354,79,282,372,282,405,110,208,53,370,243,368,232,8,329,276,141,0,262,14,299,349,372,189,303,116,88,134,196,377,164,297,114,314,273,170,382,7,160,77,250,110,332,84,164,356,175,134,241,7,370,116,116,116,116,116,116,116,117,117,117,117,117,117,117,117,117,118,118,118,118,118,119,119,119,119,119,119,119,119,119,119,119,119,119,119,120,120,120,120,120,120,120,120,120,120,120,120,120,120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,122,122,122,122,122,122,123,123,123,123,123,123,123,123,123,123,92,92,92,92,92,92,92,92},
		    {117,117,270,305,15,190,387,125,164,335,84,221,11,97,339,124,382,305,270,82,126,196,270,270,221,330,167,150,20,119,286,92,332,317,212,164,393,62,212,311,158,294,133,95,374,133,353,92,29,377,343,356,126,354,129,323,258,326,249,199,386,315,215,0,85,129,286,384,232,373,276,114,375,92,82,357,258,57,130,80,389,133,367,6,84,375,241,377,114,367,330,84,348,282,20,378,250,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,140,125,125,125,125,125,125,125},
		    {171,378,280,88,346,84,320,373,56,40,284,376,341,389,132,8,250,196,286,391,152,131,258,108,348,129,378,39,149,196,136,152,116,47,119,94,306,335,148,334,251,87,179,343,231,332,84,331,314,261,311,349,162,335,135,106,65,314,294,126,333,121,136,0,125,341,375,326,373,404,36,249,286,9,314,334,323,332,94,339,309,339,335,114,330,84,313,299,72,154,84,131,116,375,345,132,83,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,126,128,128,128,128,128,128,128,128,128,128,128,128,128,128,220,128,128,128,128,128,128,128,128,128,128,128,128,128,129,129,129,129,129,129,129,129,129,134,129,129,129,129,129,129,129,129,129,92,129,129,129,129,129,129,129,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130},
		    {92,340,258,387,282,74,169,404,167,306,251,280,241,384,241,323,374,332,285,348,306,323,89,324,13,383,23,104,389,178,172,348,369,14,46,171,190,241,245,310,387,122,388,330,386,337,167,130,81,265,193,354,387,79,404,340,350,279,241,340,333,125,143,0,332,264,190,241,71,376,62,193,191,355,347,10,294,249,15,119,94,387,190,325,84,325,340,96,191,335,166,387,233,357,349,309,98,130,130,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,132,132,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,135,135,135,135,135,135,135,136,136,136,136,136,136,128,136,136,136,137,137,137,137,137,137},
		    {375,357,36,31,56,331,355,387,340,350,325,94,0,350,130,348,383,208,9,116,226,377,125,301,251,290,357,331,299,330,261,306,84,357,373,90,263,116,366,308,341,297,373,387,306,120,23,14,83,50,164,301,349,330,387,162,381,243,182,375,404,198,234,0,166,341,387,92,334,299,404,13,348,362,198,244,122,332,92,276,339,254,341,299,127,366,393,375,278,270,170,354,79,256,46,392,125,137,137,137,137,137,138,138,138,91,139,139,139,139,139,140,140,140,140,140,140,141,141,141,141,141,141,141,142,142,142,142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,144,144,144,144,145,145,146,146,146,146,147,147,147,147,148,148,148,148,148,148,148,149,149,149,149,149,150,150,150,150,151,151,152,152,152,152,152,152,152,152,153,153,153,153,153,153,153,153},
		    {256,31,265,339,121,117,390,330,244,357,55,350,121,330,273,125,126,119,362,48,335,385,14,304,348,216,299,348,277,340,92,18,243,158,240,343,241,231,220,196,162,335,390,152,353,340,162,332,31,128,175,31,350,278,333,332,391,390,179,330,158,162,166,0,114,258,378,373,65,330,350,306,357,332,299,335,85,85,241,20,237,333,371,89,350,100,392,304,25,241,327,350,162,304,175,294,89,153,153,153,154,154,154,154,155,155,155,155,156,156,156,156,156,156,156,157,157,157,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,159,159,159,159,159,159,159,160,160,160,160,160,160,160,160,160,161,161,162,162,162,162,162,162,162,162,162,162,162,163,163,163,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164},
		    {0,282,97,378,134,188,193,98,309,135,84,282,99,385,354,3,78,294,180,172,232,78,33,325,14,92,38,172,135,189,371,179,232,92,92,176,189,55,346,353,353,82,6,346,97,353,361,186,348,378,348,261,253,244,119,348,348,346,244,332,354,159,355,0,79,278,82,278,166,400,244,114,38,82,114,37,52,84,331,230,156,238,175,375,354,330,335,330,143,121,121,334,276,114,126,377,276,164,164,164,164,164,164,164,164,167,166,166,166,166,166,166,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167,167,167,167,167,168,168,168,168,168,168,168,168,161,168,168,168,168,169,169,169,169,169,170,170,170,170,170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171,171,171,171,171,171,171,172,172,172,172,172,172,172,172,172,172,172,173,173,173,173,173},
		    {37,341,37,387,323,121,115,110,234,166,250,5,170,230,127,5,121,341,59,0,96,96,96,65,264,200,381,313,232,348,250,124,134,40,178,129,367,174,92,160,123,353,118,348,246,357,57,114,375,0,373,34,374,353,385,311,405,344,372,0,109,283,169,0,131,14,62,104,326,340,237,48,66,0,313,134,48,153,166,166,327,153,166,166,48,283,295,313,153,372,375,57,214,245,208,313,313,173,173,173,173,174,174,174,174,174,174,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,404,404,404,404,404,404,404,404,404,404,404,404,404,404,176,176,176,176,176,176,177,177,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,179,179,179,180,180,180,180,180,180,180,180,180,181,181,181,181,181,181,182,182,182,182,182,182,182,182},
		    {173,371,294,297,371,348,249,144,26,241,62,119,37,258,263,355,29,246,82,229,227,353,254,326,241,232,330,330,144,65,81,6,20,340,310,386,148,375,208,237,386,377,332,198,250,143,37,346,227,375,338,77,113,386,153,374,311,52,186,335,335,181,335,0,213,326,326,339,145,353,113,228,278,313,186,45,282,250,307,391,92,353,336,320,36,318,69,203,232,97,164,370,299,129,167,291,16,182,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,185,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,187,187,187,188,188,188,188,188,188,188,188,189,189,189,189,189,189,189,189,189,189,189,189,189,189,190,190,190,190,190,190,190,190,190,191,191,191,191,191,191,191,191,192,192,193,193,193,193,193,193,194,194,194,194,194,194,195,196},
		    {178,233,162,251,115,57,205,200,258,282,383,134,68,232,123,328,186,264,381,37,179,223,62,3,203,289,357,376,262,316,325,136,124,71,14,32,345,321,285,305,297,383,348,168,92,232,335,404,223,32,175,123,227,41,126,175,381,175,128,350,404,342,399,0,314,208,168,52,153,334,319,226,375,128,329,52,0,333,0,82,379,57,150,216,136,40,135,156,166,319,241,52,18,343,263,356,361,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,197,197,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,199,199,199,199,199,199,199,200,200,200,200,200,201,201,201,202,203,203,203,203,203,204,205,205,206,207,208,208,208,208,208,208,208,208,208,208,208,209,209,209,209,209,209,209,210,210,211,211,212,212,212,212,212,212,212,213,214,214,214,214},
		    {332,16,337,154,169,345,175,123,358,179,250,361,176,208,360,332,328,132,170,132,128,92,109,339,190,212,91,125,375,375,339,303,332,29,330,354,337,134,133,336,281,133,310,284,304,240,240,100,241,310,331,59,79,224,303,79,79,175,171,331,248,227,149,0,84,362,83,164,354,159,0,20,243,0,120,387,15,198,65,69,9,29,348,25,174,56,342,220,61,58,244,175,348,92,125,328,241,214,214,215,215,215,215,216,216,216,216,217,217,217,405,218,219,219,221,221,221,221,222,223,223,223,223,223,223,223,224,224,224,224,224,224,225,225,225,225,225,225,226,226,226,226,226,226,226,226,227,227,227,227,227,228,228,228,228,228,228,228,229,229,229,229,229,229,229,229,229,230,230,231,231,231,231,231,231,231,231,231,231,231,231,231,231,232,232,232,232,232,232,232,232},
		    {175,175,31,290,125,237,345,345,26,161,313,311,128,231,348,29,190,88,354,331,386,121,299,375,319,325,241,326,258,84,378,117,136,92,5,388,184,259,108,349,353,348,245,232,309,62,164,352,11,348,378,208,224,19,339,220,332,114,393,68,65,212,116,0,186,283,98,189,325,84,386,375,92,48,0,342,179,164,261,375,35,354,339,386,169,329,92,102,47,96,101,211,354,386,229,198,376,232,232,232,232,232,232,232,232,232,233,233,233,233,234,234,234,234,235,235,236,236,236,236,236,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,238,238,239,240,240,240,240,240,240,240,240,240,240,240,240,240,240,10,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,242},
		    {243,378,119,84,87,302,42,131,77,3,127,37,237,243,160,286,382,55,27,354,70,325,164,69,84,258,349,240,357,299,36,216,329,17,330,94,378,196,382,393,320,249,301,35,231,330,337,350,34,137,345,54,107,54,124,324,353,262,334,332,326,129,201,0,198,316,0,183,47,62,250,68,388,156,175,325,258,154,240,386,90,104,178,39,44,369,187,164,10,246,135,246,62,276,130,371,375,242,242,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,244,244,244,244,244,244,244,244,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,245,245,245,245,245,246,246,246,246,246,246,246,246,246,246,246,247,247,247,247,247,247,247,247,247,247,247,247,247,248,248,249,249,249,249,249,249,249,249,250,250,250,250,250,250,250,250},
		    {94,149,246,345,324,13,377,125,170,304,310,59,116,110,45,32,119,84,157,276,345,348,311,241,323,27,373,363,133,14,348,188,0,228,66,249,143,333,323,354,354,84,166,341,201,27,328,45,334,233,198,3,350,155,155,126,190,393,393,389,262,330,347,0,345,250,125,84,404,125,230,114,114,115,345,316,386,247,189,120,282,87,377,243,325,20,325,92,71,220,301,251,373,343,284,158,387,250,250,250,250,250,251,251,251,251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,253,253,254,254,254,254,255,255,255,255,255,256,256,256,257,257,258,258,258,258,258,258,258,258,258,258,259,259,260,261,261,261,261,261,261,261,261,261,261,262,262,262,263,263,263,263,263,263,263,263,263,263,264,264,265,265,265,266,266,267,267,268,268,268,269,269,269,269,270,270},
		    {220,355,186,357,286,381,100,254,342,0,325,353,296,349,284,45,284,357,373,263,164,252,355,164,134,330,40,340,316,172,328,63,243,389,238,54,355,40,354,226,240,199,330,82,357,267,25,189,300,194,296,172,330,97,159,91,54,305,179,341,385,102,387,0,103,393,311,27,229,0,282,159,171,311,339,184,314,378,3,166,387,237,340,130,317,129,325,318,26,354,348,386,14,175,21,370,162,270,270,271,271,271,272,272,272,272,273,273,273,274,275,276,276,276,29,276,276,276,276,276,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,281,281,281,281,281,281,281,281,281,281,281,281,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,283,283,283,283,283,283},
		    {244,182,345,171,330,234,103,107,62,175,281,279,62,343,20,62,367,282,341,116,5,189,404,376,238,126,189,48,211,121,137,349,278,349,104,35,116,276,147,243,180,361,363,164,325,92,343,283,188,223,31,63,265,162,354,127,378,149,125,181,357,10,353,0,175,220,75,309,81,136,81,263,82,153,292,344,340,84,305,329,68,294,334,330,268,357,280,125,300,171,354,331,294,216,341,357,354,283,283,283,283,283,284,284,284,284,284,284,284,284,284,284,284,284,282,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285,285,285,285,285,285,285,285,285,285,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286},
		    {334,109,2,121,121,92,386,333,323,192,163,126,24,282,273,166,143,355,55,375,305,369,300,345,79,66,335,97,378,125,142,268,343,220,7,72,236,355,214,377,328,234,241,362,35,373,77,208,350,48,334,241,78,125,354,153,15,385,189,158,130,248,245,0,0,332,297,404,348,340,335,348,156,162,128,62,375,11,220,196,119,228,296,304,318,248,127,325,172,121,223,142,357,10,164,378,378,286,287,287,288,288,288,288,289,289,290,290,290,291,291,291,291,292,292,292,292,293,293,293,293,294,294,294,294,294,294,294,294,294,294,294,294,294,284,294,294,295,295,295,295,295,295,295,295,296,296,296,296,297,297,297,297,297,297,297,297,297,339,297,297,298,298,298,299,299,299,299,299,299,299,299,299,299,299,300,300,300,301,301,301,301,301,301,301,301,302,302,302,302,302},
		    {2,170,341,246,157,363,329,265,265,246,175,297,318,183,357,237,354,343,92,132,341,249,297,132,83,20,333,348,332,354,134,332,332,349,244,350,173,315,117,356,171,220,186,158,153,158,92,305,182,162,162,121,295,375,325,153,118,164,92,162,118,179,92,0,153,175,125,0,308,162,251,334,348,176,187,17,375,334,134,116,340,54,84,340,175,116,109,128,134,10,345,369,369,153,18,330,286,302,302,302,302,303,303,303,303,303,303,303,303,303,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,305,305,305,305,305,305,305,305,305,305,305,305,305,306,306,306,306,306,306,306,306,306,306,306,307,308,308,308,308,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,310,310,310,310,310,310,310,310,311,311,311,311,311,312,312,312,313,313,313},
		    {64,249,66,0,136,372,347,354,107,386,333,80,75,6,37,243,326,356,356,137,241,314,375,355,252,353,246,241,376,198,324,82,82,108,84,254,228,208,307,237,62,134,164,84,367,340,232,232,332,64,17,19,369,312,97,350,179,47,121,183,84,169,348,0,332,164,348,237,245,281,348,324,196,245,102,248,160,337,129,249,124,356,34,11,107,341,373,240,332,167,14,355,353,129,57,63,121,313,313,313,313,313,313,313,314,314,314,314,314,314,314,314,314,314,314,314,314,315,315,315,315,316,316,316,316,316,316,316,316,316,316,316,317,317,318,318,318,318,318,318,319,319,319,320,320,320,320,320,320,320,320,320,320,320,321,321,321,321,321,321,321,322,322,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,325},
		    {295,134,241,354,137,330,178,164,65,306,154,107,107,9,81,325,319,357,301,243,325,208,325,167,68,75,8,385,324,24,189,0,156,129,313,184,340,190,129,284,341,345,262,325,84,355,186,325,264,335,331,350,284,376,305,378,387,309,355,188,156,70,249,0,330,328,357,354,350,126,8,294,47,330,327,166,226,261,92,329,339,107,348,232,117,348,70,207,331,116,121,180,348,326,350,308,376,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,326,326,326,326,326,326,326,326,326,326,327,327,327,328,328,328,328,328,328,328,328,328,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,330,330,330,330,330,330,330,330,330,330,330},
		    {25,0,241,311,279,62,175,325,375,35,250,232,354,125,174,246,349,126,326,334,182,372,372,180,354,172,48,164,182,334,32,196,391,294,249,307,375,231,127,250,17,168,102,330,241,381,81,168,136,136,349,309,128,256,334,329,376,343,294,40,36,58,164,0,320,348,131,55,241,92,333,281,246,350,30,164,364,341,378,363,335,183,335,241,261,125,109,385,129,18,110,79,162,129,156,193,164,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,332,330,330,330,330,330,331,331,331,331,331,331,331,331,331,331,276,331,331,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,334,334,334,342,334,334,334,334,334,334,334},
		    {249,212,175,70,334,378,173,164,173,227,347,232,279,347,350,286,330,24,250,251,24,182,129,378,385,120,405,229,376,181,77,143,192,330,140,355,250,171,341,286,314,333,354,116,325,59,38,325,59,384,88,354,348,84,230,129,376,57,348,376,129,375,335,0,254,375,137,30,348,254,320,171,228,220,393,14,280,134,149,342,373,348,224,84,62,84,103,375,375,254,348,320,199,96,341,372,250,334,334,334,334,334,334,334,335,335,335,335,335,335,124,335,335,335,335,335,335,335,335,335,335,335,335,335,335,336,336,336,336,336,336,336,336,336,336,337,337,337,337,337,337,337,337,337,108,337,337,337,337,337,338,338,338,338,338,338,338,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,340,340,340,340,340,340,340,40,340,340,340,340,340,341,341,341,341,341,341},
		    {354,208,20,0,221,241,148,258,126,392,196,129,77,263,378,102,349,138,337,0,154,211,286,335,154,164,135,282,129,373,172,92,348,21,382,291,253,164,339,304,154,306,355,171,37,32,59,167,229,81,355,345,70,375,348,241,104,144,241,309,309,84,376,0,335,65,154,317,353,353,355,84,354,317,345,348,228,57,357,302,96,118,261,355,200,132,301,226,271,211,350,129,118,148,166,164,284,341,341,341,341,342,342,342,342,342,342,343,343,343,343,343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,220,220,220,220},
		    {404,348,65,335,332,325,16,26,92,278,239,14,240,125,381,125,54,92,57,358,79,81,333,343,17,256,182,158,5,363,121,26,299,216,57,166,58,286,369,14,158,240,375,0,286,321,284,11,335,20,35,157,173,330,332,158,372,56,134,360,284,125,348,0,158,344,330,83,84,0,6,110,92,92,332,100,15,345,340,136,233,184,189,189,235,284,294,92,373,136,189,311,166,220,375,137,330,220,220,220,220,220,220,220,220,220,220,220,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349},
		    {278,325,330,310,354,158,75,70,246,227,92,194,350,96,250,369,130,100,61,125,179,250,125,325,136,250,179,158,282,92,100,345,310,249,130,50,375,33,92,57,375,335,251,91,284,102,335,122,249,337,208,241,175,367,14,337,279,95,375,342,40,330,348,0,175,136,330,345,330,345,66,84,249,249,128,92,79,343,64,114,30,306,340,129,348,258,343,349,278,241,320,92,343,349,75,82,344,349,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,351,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,340,354,354,354,354,354,354,354,354,354},
		    {220,295,282,349,349,136,334,204,35,353,375,338,80,336,191,281,345,268,384,340,348,348,297,37,110,282,110,340,373,378,374,96,386,369,97,84,125,65,171,309,346,217,226,377,88,348,134,220,367,348,348,250,371,237,14,338,250,20,55,389,306,378,47,0,372,352,340,343,348,120,110,284,245,334,284,112,70,115,102,251,121,129,117,87,346,325,282,377,314,189,194,179,121,345,338,98,77,354,354,354,354,354,354,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,356,356,356,356,220,356,356,356,356,356,357,357,357,357,357,357,357,357,357,357,357,357,358,358,358,359,359,359,359,359,359,359,360,360,360,360,361,361,361,362,362,362,362,362,362,362,362,362,362,362,362,362,362,363,363,363,363,364,365,366,366,28,366,367,367,367,367,367},
		    {19,311,348,162,378,152,250,329,92,375,258,50,159,75,152,348,313,57,11,31,353,145,127,246,287,3,354,334,36,129,332,329,329,90,295,21,121,131,356,373,356,70,117,32,291,129,143,250,48,334,299,324,332,81,157,302,348,208,349,377,232,385,31,0,35,384,92,241,304,383,325,134,247,68,374,393,388,243,385,167,125,92,331,178,282,16,117,233,354,335,340,233,284,341,284,122,117,367,367,367,278,367,358,367,367,367,368,368,368,368,368,368,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,371,371,371,371,371,371,371,371,371,371,372,372,372,372,372,372,372,372,372,372,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,374,374,374,374,374,374,374,374,374,374,374},
		    {75,376,309,335,84,240,313,158,241,354,386,381,330,121,349,315,332,201,35,83,378,346,345,120,341,91,221,340,197,347,325,337,308,377,278,238,318,120,123,91,350,189,334,189,331,244,373,342,309,297,9,37,369,348,126,355,335,334,306,220,220,375,354,0,234,48,164,196,196,279,372,195,125,363,389,166,404,362,340,103,330,385,5,5,130,372,348,334,126,182,371,332,321,57,340,366,273,373,374,374,374,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,376,376,376,376,376,376,376,376,376,376,376,377,377,377,377,377,377,377,377,377,377,377,377,377,377,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378},
		    {330,367,72,374,334,158,75,350,136,92,392,127,20,121,381,329,365,367,375,127,304,365,240,283,341,362,304,58,299,332,92,128,369,400,348,2,369,121,335,348,348,278,255,400,243,72,302,116,377,109,348,350,140,354,125,121,70,372,341,360,162,282,325,0,31,164,348,15,372,345,75,39,325,39,220,31,255,349,158,35,335,212,119,360,348,58,369,345,70,320,258,338,338,14,377,282,340,378,378,378,378,379,371,380,381,381,381,381,390,381,382,382,382,382,382,382,382,383,383,383,383,383,383,384,384,385,385,385,385,385,385,385,385,372,385,385,386,386,386,386,386,386,386,386,359,386,386,386,386,386,386,387,387,387,387,387,387,387,388,388,388,388,389,389,389,389,389,389,389,389,390,390,391,391,391,391,392,392,393,393,393,367,393,393,393,393,0,0,0,0,0},
		    {243,114,331,92,114,107,173,330,330,168,107,70,173,241,164,61,15,286,332,83,375,375,345,345,40,121,319,348,348,345,6,115,75,40,345,154,87,134,240,330,119,378,124,82,330,123,326,119,62,387,82,348,3,232,199,232,96,199,353,196,294,119,184,0,196,3,354,208,14,354,124,317,184,330,348,354,40,304,119,136,11,373,357,84,23,95,307,348,108,323,236,123,79,304,323,368,375,40,92,329,87,209,268,232,93,36,91,203,75,286,354,235,14,320,220,220,375,62,336,349,153,354,90,306,63,92,200,212,92,241,189,11,273,97,363,281,54,345,136,294,347,345,250,238,102,153,15,363,98,353,27,348,326,131,148,102,139,156,92,345,323,150,234,136,127,123,348,314,324,57,66,370,161,268,348,198,258,354,232,344,321,329,32,25,141,378,214,138,353,348,96},
		    {77,378,284,14,386,77,102,233,78,181,307,283,152,84,312,348,37,184,110,82,175,170,121,87,233,386,124,340,364,128,87,361,125,350,343,373,281,18,18,249,281,42,361,377,157,360,47,35,279,310,229,94,332,181,125,299,84,304,48,48,375,92,370,0,70,130,338,45,357,10,359,157,83,25,92,283,348,390,84,96,269,363,168,348,7,35,323,375,383,16,357,366,57,360,345,240,278,314,320,208,86,92,77,353,149,140,378,348,311,30,128,216,197,39,345,164,249,164,354,237,352,294,83,243,267,225,385,286,179,328,14,309,100,146,134,82,345,335,92,325,387,404,305,18,221,37,330,131,125,128,133,314,341,57,314,319,281,243,389,356,51,62,330,343,114,104,31,153,10,240,114,84,84,297,294,326,345,20,103,184,335,176,239,19,350,179,162,167,116,169,332},
		    {323,350,130,382,332,361,14,70,286,345,0,341,173,382,361,357,14,377,83,357,330,338,330,36,36,331,305,388,164,278,248,349,332,386,136,246,62,47,373,316,62,330,369,136,129,250,40,123,342,311,74,88,301,50,330,371,297,349,250,125,252,385,325,0,175,58,249,386,309,250,37,120,127,127,128,362,356,77,389,329,143,136,35,227,356,224,241,320,348,209,171,186,148,386,242,378,250,295,237,376,194,345,129,114,278,223,134,204,97,110,62,371,250,348,152,162,98,129,121,282,96,251,374,122,340,127,90,152,395,388,385,325,354,282,31,299,35,125,342,347,75,354,341,3,62,386,233,196,58,297,284,189,372,125,365,127,136,345,369,35,57,130,393,329,243,131,8,63,393,11,337,87,375,212,388,44,232,325,120,325,330,107,248,152,183,329,80,19,232,11,347},
		    {369,226,378,208,348,92,74,74,378,392,380,333,65,233,375,129,23,55,250,286,316,50,145,212,334,21,392,198,286,128,127,0,125,241,328,325,129,252,212,134,212,178,175,163,328,251,389,245,348,62,387,231,374,354,73,45,352,375,367,35,320,305,84,0,389,257,367,318,244,369,63,309,92,172,360,14,38,175,168,305,375,297,330,153,92,385,244,375,226,387,166,362,254,318,134,332,376,62,303,124,375,378,150,245,343,357,164,350,90,330,84,232,304,345,135,345,349,370,238,278,388,171,83,40,119,181,250,280,110,91,188,340,335,296,335,136,125,278,58,32,294,15,12,249,12,75,78,286,92,352,110,340,329,91,373,152,232,348,164,241,8,88,173,63,175,34,62,320,208,198,5,344,65,68,139,278,279,203,87,349,36,284,104,343,169,355,375,3,348,232,209},
		    {20,50,136,170,302,127,127,168,73,100,55,14,14,134,127,73,39,92,329,356,209,375,356,375,40,71,325,173,170,332,325,158,255,335,212,302,250,252,51,390,330,153,241,170,57,82,309,74,95,159,258,179,2,92,134,146,0,345,186,141,250,404,160,0,320,375,345,309,59,350,354,34,367,102,137,356,336,56,341,79,258,278,152,286,319,241,303,75,199,241,184,264,152,243,381,114,116,231,316,272,56,148,65,349,163,115,91,355,182,352,167,37,336,232,348,26,128,200,70,243,92,323,338,241,333,84,355,357,81,92,164,75,134,232,375,265,332,32,48,246,329,243,241,278,15,378,147,348,196,88,235,173,6,198,134,254,247,37,84,171,211,349,184,350,248,193,311,243,348,256,14,47,134,314,121,378,313,127,84,258,337,251,121,343,194,241,128,38,126,179,350},
		    {250,152,62,171,56,5,373,79,152,346,231,11,97,97,228,378,261,75,6,377,375,220,143,372,375,284,237,77,95,134,334,101,344,139,251,377,386,375,281,167,354,280,353,355,349,372,323,84,247,377,348,171,372,369,167,386,121,324,46,121,140,348,231,0,243,103,209,237,100,11,178,225,167,264,262,92,346,332,42,49,292,344,353,114,286,84,386,84,357,12,369,354,357,306,97,373,331,343,93,130,181,300,114,377,140,14,284,328,353,75,186,353,164,316,332,84,299,353,62,282,100,167,350,45,131,241,330,295,130,200,241,6,286,32,312,354,119,14,84,316,57,52,345,389,58,125,323,350,97,107,242,83,282,333,325,31,139,241,153,330,75,10,224,313,174,225,341,124,373,284,263,196,76,11,327,109,92,164,9,125,293,159,350,354,297,188,69,330,166,50,170},
		    {355,175,334,33,381,325,341,342,372,128,369,21,168,82,79,170,91,273,140,119,348,92,383,77,354,125,114,162,229,164,164,175,170,56,377,167,357,47,391,15,156,47,348,15,15,0,8,47,15,233,216,216,373,46,348,259,79,284,263,31,88,354,348,0,241,367,324,316,384,309,333,309,75,376,34,208,375,373,378,306,348,250,121,68,353,200,348,129,169,343,73,132,353,249,62,131,348,250,147,340,168,121,343,136,265,391,92,188,79,241,114,335,114,325,348,327,296,14,109,303,263,343,332,90,164,123,250,113,79,212,189,216,348,152,166,55,348,330,361,228,353,168,86,88,309,187,317,35,84,236,215,129,128,358,348,404,137,310,347,2,199,92,104,7,134,239,169,243,100,65,367,344,246,354,3,341,19,153,355,286,76,41,125,293,369,221,271,179,350,375,107},
		    {0,329,166,301,121,97,157,12,54,378,231,353,377,130,354,46,309,302,355,221,305,299,345,37,309,284,373,353,357,75,123,302,325,201,220,39,343,302,284,375,355,297,180,100,370,372,22,37,297,73,284,174,375,54,256,243,341,354,348,75,168,284,181,0,341,369,308,77,15,15,164,355,353,179,164,313,241,278,354,263,323,84,141,18,336,282,355,53,123,9,134,15,321,152,102,284,148,372,335,175,392,51,88,119,232,337,385,123,390,202,348,318,56,284,21,37,92,147,59,161,367,1,220,84,198,348,303,164,75,14,11,104,246,349,358,138,86,98,171,68,214,74,203,353,294,152,92,282,121,55,169,348,334,14,47,101,121,339,348,225,150,74,92,192,189,367,216,93,197,181,37,160,94,76,367,301,362,330,393,92,83,363,221,191,170,381,377,306,116,52,276},
		    {106,331,92,115,337,330,102,221,159,345,36,69,404,84,354,159,124,94,20,330,250,334,241,247,377,388,237,162,208,353,239,333,134,352,127,348,186,267,11,286,354,357,115,153,333,333,296,305,194,330,263,40,386,388,347,329,333,357,127,352,184,33,175,0,168,381,116,127,323,127,340,61,14,343,14,366,325,374,184,170,74,188,347,272,150,83,188,155,166,360,31,353,241,345,31,360,251,351,57,20,66,159,164,287,46,367,55,201,164,153,129,352,153,133,296,349,37,129,174,148,328,121,246,5,297,70,143,212,110,35,301,91,1,76,109,398,2,2,301,111,314,37,229,162,26,234,241,350,13,296,62,189,231,136,168,240,41,128,222,246,175,28,61,109,130,342,348,269,232,263,29,123,202,325,125,201,178,116,171,353,354,247,354,119,325,375,229,305,39,363,104},
		    {330,360,375,354,349,391,184,373,69,373,355,84,310,242,238,39,391,46,353,349,240,391,106,383,175,158,345,306,369,304,383,332,70,304,249,45,357,78,143,296,39,54,357,352,4,367,126,234,35,354,164,362,348,126,304,238,216,348,345,348,210,263,285,0,345,171,189,189,210,336,128,284,189,345,15,284,348,330,130,249,348,168,59,371,171,238,249,6,373,375,6,176,84,200,64,332,127,325,328,182,370,84,79,92,241,243,241,250,344,332,5,399,158,6,116,143,68,124,339,56,96,184,193,348,68,127,343,374,160,157,295,345,97,334,104,146,136,261,220,322,359,325,354,54,174,386,186,283,295,92,370,170,61,18,348,63,37,227,50,343,346,115,157,330,32,120,220,375,128,250,270,79,249,3,101,180,215,357,331,228,81,261,150,285,300,14,135,164,354,332,349},
		    {147,42,386,79,354,329,107,89,241,183,260,62,294,330,348,30,348,316,330,405,243,249,125,371,347,349,224,80,373,337,69,356,376,84,232,265,336,75,136,73,96,349,243,8,330,258,33,215,82,357,348,246,232,104,114,349,137,64,348,376,330,87,260,0,123,303,141,355,175,0,326,74,386,208,316,284,193,232,143,171,19,303,116,20,232,354,294,393,21,377,310,124,373,284,389,375,134,298,348,104,179,208,281,50,189,116,29,325,325,186,203,370,131,136,168,335,343,119,42,123,300,349,68,284,305,319,330,258,354,37,348,333,20,354,122,29,296,196,339,130,270,381,202,232,329,102,228,339,333,320,3,354,14,94,5,130,31,335,170,350,286,59,53,31,329,375,223,38,329,139,32,43,295,15,215,116,40,231,55,346,393,208,84,33,348,348,314,345,27,139,343},
		    {312,348,348,341,371,228,110,273,283,389,389,20,378,37,358,238,314,243,84,368,184,345,84,164,356,232,346,8,20,129,250,340,374,198,330,330,62,124,198,304,282,348,294,152,138,11,385,337,114,128,37,145,179,237,284,197,143,349,137,377,38,333,314,0,196,162,92,354,340,258,392,375,293,164,332,337,251,232,348,378,333,194,149,220,332,332,339,137,29,160,92,232,263,189,348,349,101,143,357,11,295,243,153,154,348,309,251,245,337,81,32,324,39,116,52,357,153,75,163,383,127,14,297,243,352,131,127,38,40,170,188,310,121,289,345,325,114,193,141,302,404,154,133,159,354,32,330,326,122,75,250,252,110,310,252,140,382,226,244,270,241,294,29,83,355,198,190,73,189,97,15,326,108,325,161,88,286,173,175,346,294,74,171,184,179,341,226,320,114,193,131},
		    {3,67,353,273,142,243,294,0,64,107,356,375,145,249,334,372,353,361,309,54,98,114,376,316,404,188,159,323,386,357,11,297,354,31,313,20,107,124,114,135,83,31,323,375,320,341,329,354,311,152,385,177,337,246,282,107,177,347,134,366,134,332,312,0,183,240,164,226,356,36,90,164,307,19,378,373,316,172,391,134,32,355,125,89,64,306,32,178,149,171,232,175,164,244,239,135,193,119,325,169,124,373,349,121,378,92,340,121,306,343,126,172,116,343,263,297,329,157,325,385,135,399,9,330,186,119,378,241,330,295,70,385,232,190,88,81,48,282,100,175,289,335,345,190,249,296,120,340,230,125,341,328,186,345,246,143,281,183,350,240,164,263,302,122,14,339,84,305,227,194,120,350,334,158,26,116,179,119,166,378,348,175,341,88,286,294,278,280,314,31,157},
		    {391,231,3,232,332,344,383,164,143,146,302,154,70,383,44,386,374,12,212,387,74,345,66,348,243,383,92,354,130,100,184,32,319,330,166,306,97,330,286,373,404,188,175,117,16,86,157,144,80,329,200,323,116,60,332,0,123,167,78,187,139,346,284,0,166,104,332,70,316,325,323,84,262,92,75,137,373,309,367,116,346,71,331,354,145,283,120,325,84,371,29,245,284,114,153,310,127,299,164,57,31,166,263,240,14,109,385,107,335,350,356,82,109,6,10,102,58,189,353,35,214,243,243,329,168,243,119,125,125,388,344,329,132,363,348,77,124,131,56,115,227,21,164,249,334,309,253,153,325,119,175,42,120,249,331,5,96,302,172,332,170,134,335,191,299,156,343,121,317,375,142,375,92,75,31,330,134,31,131,217,189,84,14,354,40,293,81,345,329,354,14},
		    {127,115,315,387,119,347,193,125,71,125,295,153,116,341,372,129,373,15,376,386,339,347,186,225,2,87,243,186,301,302,227,331,166,301,139,389,347,400,327,261,305,301,244,164,293,383,20,226,268,232,271,89,386,329,350,120,311,172,139,300,284,296,323,0,109,373,373,179,348,355,305,212,330,124,91,180,135,295,389,301,0,83,326,199,175,301,223,389,317,339,100,341,166,296,182,196,179,130,386,102,215,354,294,55,377,278,245,344,256,286,176,128,236,29,164,237,321,332,301,62,325,75,131,16,129,32,14,31,217,5,355,313,329,96,196,232,2,236,37,164,345,244,234,32,162,370,330,278,14,211,196,290,86,86,84,217,386,129,136,10,361,294,84,388,348,217,303,334,117,233,164,241,143,383,24,375,329,5,172,278,16,48,31,92,333,128,354,377,91,323,152},
		    {14,325,172,62,270,387,348,175,145,244,52,241,32,305,182,352,31,83,131,16,286,404,339,48,173,360,360,26,164,331,330,141,290,13,370,243,36,175,117,92,240,299,244,238,170,273,339,332,36,153,294,172,203,120,235,299,79,127,251,346,305,333,354,0,128,392,168,245,160,73,336,360,241,125,376,61,344,350,73,136,400,360,240,312,0,370,66,278,139,125,81,299,175,135,121,354,166,357,232,286,88,335,84,377,84,40,56,148,108,126,94,334,309,171,241,81,279,103,74,285,172,251,323,386,143,333,309,191,121,294,15,96,383,193,130,373,263,90,164,348,125,18,234,182,162,195,272,335,168,366,126,243,127,119,390,220,92,42,359,352,66,92,325,18,193,136,143,173,63,56,238,193,124,77,95,340,344,113,220,179,330,121,166,241,350,241,116,154,345,48,323},
		    {385,272,243,385,162,14,312,341,347,74,104,305,250,82,55,348,2,387,343,64,378,113,383,92,212,110,123,247,18,350,153,214,340,125,125,243,29,375,192,164,162,92,390,152,279,231,156,70,356,46,404,16,10,175,332,151,173,75,175,125,158,20,243,0,220,31,333,125,330,100,25,212,162,51,250,226,179,390,176,393,348,136,305,378,158,330,346,337,228,337,183,344,375,332,354,348,32,35,134,184,354,355,331,203,2,305,130,120,350,52,48,341,370,240,24,250,175,14,360,326,325,357,306,329,280,241,29,180,164,232,191,220,265,125,40,36,48,334,80,224,378,200,375,372,173,133,237,175,331,334,353,375,320,375,171,96,62,164,320,36,142,160,344,256,375,373,101,241,313,155,133,117,113,102,129,176,135,3,340,79,97,84,136,386,301,171,40,82,70,243,371},
		    {375,350,120,386,20,305,261,13,172,341,156,31,370,370,133,5,65,136,168,208,187,180,289,278,278,187,345,14,107,14,278,243,141,13,114,266,270,332,332,125,193,331,291,69,367,203,369,231,331,171,100,14,266,110,323,91,91,78,40,333,102,193,0,0,154,167,404,313,276,134,356,356,31,250,170,305,277,154,345,326,345,354,122,354,326,333,10,333,250,220,326,226,349,325,349,155,252,179,44,167,104,125,62,134,49,282,201,367,166,158,92,236,134,249,71,44,35,404,29,134,341,186,350,373,81,302,300,335,90,52,90,293,18,261,378,335,130,244,241,40,305,378,116,88,356,247,320,136,127,246,175,392,330,134,355,162,345,170,20,29,353,5,196,50,279,310,357,166,234,57,92,18,348,258,75,97,143,175,375,348,373,116,164,220,284,375,251,175,372,209,324},
		    {158,281,251,0,310,212,302,139,110,252,43,323,69,241,153,305,323,234,332,330,121,31,232,305,119,302,326,0,107,139,281,121,302,119,161,336,348,375,349,346,69,75,283,229,145,357,375,232,36,75,250,62,171,375,19,74,286,299,77,102,354,137,127,0,337,45,329,331,278,283,240,373,332,59,229,348,72,178,349,134,373,175,283,332,349,378,346,259,331,38,345,349,354,62,325,212,383,46,386,49,175,170,325,125,244,124,92,92,140,61,87,125,361,223,171,21,13,366,232,238,86,156,88,109,304,90,363,336,357,102,110,360,184,354,32,208,241,283,347,33,345,121,21,107,102,341,153,2,194,319,343,220,330,202,12,284,152,348,375,386,87,130,373,157,249,92,57,84,31,92,330,62,354,96,130,250,125,126,236,184,97,329,97,92,134,125,233,142,245,301,7},
		    {3,129,241,345,121,357,329,305,92,59,5,330,349,268,256,170,318,61,232,299,354,345,82,208,77,92,59,349,375,173,330,164,164,252,375,348,246,243,119,96,391,116,358,354,39,299,107,328,290,119,134,358,352,92,330,172,164,221,342,358,92,92,199,0,85,330,198,82,227,357,37,346,3,329,63,58,116,64,198,35,367,171,241,377,114,369,349,378,319,171,68,350,329,171,171,114,349,91,20,184,198,52,125,270,286,32,175,240,250,235,59,332,42,68,344,349,143,357,79,37,128,70,65,353,355,104,356,328,261,120,131,264,303,95,384,199,220,243,173,68,138,175,124,282,377,393,98,373,250,375,131,101,68,345,150,268,106,233,373,189,319,179,54,228,323,211,131,345,81,354,387,66,125,49,201,190,321,75,286,36,350,91,404,18,308,375,41,97,188,272,278},
		    {181,181,357,172,188,18,329,325,155,330,348,57,308,354,173,56,92,227,346,325,0,330,92,329,188,162,164,301,2,81,56,173,171,348,83,164,10,110,110,110,19,247,310,373,36,247,167,131,310,81,190,10,310,121,347,66,29,243,258,62,70,329,258,0,246,215,349,268,199,321,389,8,348,220,306,14,129,114,228,19,349,302,306,129,3,112,95,242,313,350,299,311,341,146,13,302,370,166,170,354,330,348,276,336,330,16,268,134,296,16,16,286,96,97,116,81,92,158,354,229,184,369,131,208,172,348,346,325,73,244,284,116,378,341,303,347,346,329,107,187,33,345,116,354,325,71,10,341,15,318,172,182,279,357,348,354,79,299,332,136,51,294,306,340,330,164,116,132,116,81,284,294,332,375,250,116,84,393,189,375,47,373,311,241,31,330,385,330,255,307,304},
		    {232,155,156,367,9,0,249,249,281,280,198,125,62,0,306,302,335,226,91,19,155,305,174,121,127,342,92,125,126,31,302,116,332,243,70,321,125,158,325,258,84,321,251,91,325,280,107,32,155,262,357,281,325,91,84,306,96,357,90,14,342,299,70,0,321,70,84,133,332,335,332,92,358,161,231,350,350,357,231,3,349,333,116,347,66,247,153,333,292,107,340,348,340,97,295,153,241,72,124,121,405,213,346,386,252,243,193,307,241,72,184,187,89,354,354,302,342,191,92,88,58,117,34,73,344,385,15,83,78,2,164,173,367,314,62,156,320,84,337,183,331,127,368,68,203,91,328,241,72,11,66,35,377,129,62,341,15,372,103,271,247,250,73,61,126,22,188,20,140,375,84,84,340,190,147,73,191,57,283,355,348,299,386,37,197,157,125,62,301,344,208},
		    {108,354,323,82,73,62,63,226,238,171,34,131,162,246,127,75,75,325,335,155,282,348,348,143,72,354,237,162,311,124,315,121,153,124,179,313,36,350,357,116,107,131,318,318,236,157,318,386,386,44,66,157,304,107,243,151,389,332,246,348,269,309,75,0,75,345,326,345,354,381,345,332,336,348,355,271,310,310,126,153,162,160,234,380,182,50,220,109,127,97,343,345,121,278,263,188,18,299,232,265,296,153,184,143,194,234,36,140,170,97,66,14,251,310,79,373,281,323,317,84,89,97,164,345,232,158,164,92,366,110,100,135,130,86,348,238,371,168,316,42,278,187,30,405,21,303,134,8,243,80,141,315,123,224,354,374,97,143,238,21,20,356,198,304,63,293,284,341,302,14,208,232,74,142,160,77,353,36,124,203,347,36,64,349,139,378,66,67,117,251,105},
		    {332,236,175,170,212,251,313,132,239,350,354,162,83,67,98,84,331,369,228,268,84,303,169,92,341,334,134,16,294,325,346,220,296,139,296,79,172,330,172,234,234,172,16,16,16,168,16,273,83,339,346,369,294,220,172,81,79,81,284,24,92,66,294,0,320,369,384,258,354,346,284,349,79,79,300,349,378,348,393,14,129,306,10,47,312,294,10,284,74,106,258,310,128,124,19,220,314,276,64,374,273,38,305,3,263,160,157,307,145,366,164,90,75,54,177,172,139,125,159,246,134,1,244,221,12,60,143,154,97,123,229,135,304,386,245,139,294,75,29,296,119,2,174,244,81,186,196,91,135,199,172,348,124,18,16,305,182,179,352,389,341,62,31,136,240,175,73,158,240,51,244,61,123,385,348,29,16,376,282,54,375,14,386,196,286,404,92,84,159,143,258},
		    {47,333,346,135,77,161,330,20,205,75,21,137,69,297,354,330,220,154,104,284,125,383,19,332,21,347,304,81,370,325,100,75,218,357,116,120,121,369,115,110,337,82,325,97,29,295,305,20,90,330,153,172,296,332,347,326,196,305,182,14,354,339,130,0,270,318,381,278,37,57,348,241,256,36,325,333,369,82,106,188,345,196,31,333,179,360,202,66,320,74,124,161,330,69,137,104,97,373,92,273,209,84,255,102,128,109,330,238,65,116,352,133,355,10,373,97,68,175,250,37,294,77,375,98,339,176,20,164,116,354,332,309,329,191,3,11,45,116,75,47,186,329,220,125,350,372,172,168,128,133,354,116,175,100,19,66,129,164,278,164,353,88,143,57,367,228,378,341,124,344,348,375,160,329,54,332,276,378,81,97,325,354,354,57,156,348,115,54,174,124,272},
		    {347,20,82,20,208,14,238,316,107,81,125,3,2,332,357,82,236,336,180,354,237,243,62,320,372,37,343,378,375,229,336,260,268,357,326,375,57,404,353,20,10,150,320,348,250,240,250,132,238,371,355,231,377,134,378,217,134,232,389,124,171,373,368,0,84,346,284,14,320,320,294,172,180,233,306,375,261,308,68,343,251,282,132,77,106,20,378,349,179,377,57,106,172,134,295,246,183,37,196,8,92,120,16,179,350,368,173,349,39,8,157,348,63,232,63,250,348,295,330,248,384,15,220,311,69,143,354,343,134,354,348,29,199,258,130,186,226,58,242,91,144,166,36,166,125,16,40,309,14,134,74,55,11,10,404,15,158,37,372,244,263,226,286,340,137,53,130,162,386,33,294,123,160,305,223,174,126,400,196,65,66,57,171,214,104,153,5,304,107,241,108},
		    {167,107,316,341,318,137,75,36,337,294,175,383,377,281,233,154,306,157,387,143,241,241,345,81,272,345,91,220,329,233,48,233,243,81,120,243,123,354,309,251,331,387,153,262,294,98,320,318,296,243,36,375,172,231,308,330,26,70,345,355,388,334,278,0,241,375,290,175,330,179,370,196,220,24,234,48,250,14,375,354,340,117,20,297,334,170,369,73,172,320,28,63,334,312,345,179,369,129,110,350,143,107,75,381,212,182,271,109,263,236,116,243,249,92,30,121,91,188,84,232,265,332,109,129,95,69,349,37,107,97,143,164,353,254,367,249,171,36,353,248,124,203,375,294,250,313,155,241,128,346,197,282,372,280,329,164,40,84,244,247,241,330,354,81,104,104,348,232,311,251,323,159,188,45,261,201,84,153,143,84,296,354,353,174,249,15,197,246,5,182,183},
		    {131,348,347,372,236,377,345,361,404,308,333,92,290,134,330,119,164,234,260,349,234,337,246,387,297,153,290,325,325,325,354,88,348,141,10,11,368,309,334,149,318,94,233,354,299,238,334,227,136,54,196,168,174,334,361,309,18,151,175,90,127,142,127,0,160,272,154,309,80,339,254,57,154,18,78,232,78,309,10,14,262,84,77,261,250,95,356,231,379,280,301,309,164,18,309,231,295,180,355,330,37,305,227,284,120,26,234,305,330,333,376,370,288,184,231,121,226,278,123,188,31,166,192,164,70,250,85,350,247,331,284,378,354,92,70,92,125,371,386,116,248,238,55,283,363,96,164,294,311,124,15,37,147,14,332,345,251,374,137,284,89,224,280,334,247,363,245,378,267,243,320,14,57,146,355,334,373,153,120,115,96,81,164,14,37,297,192,69,175,71,102},
		    {374,387,292,125,74,116,156,241,166,373,231,180,270,182,182,275,340,169,243,243,202,155,214,18,255,69,69,203,333,330,69,107,69,69,133,354,354,345,164,336,102,387,172,335,279,186,241,241,86,340,354,318,241,167,88,234,14,241,340,39,345,369,354,0,59,258,129,6,114,320,64,92,354,117,245,301,108,319,196,129,282,8,355,232,404,326,116,175,358,80,82,199,353,233,196,110,331,63,360,61,20,157,377,354,354,38,330,212,405,42,278,348,14,376,8,80,91,175,378,363,330,280,325,188,285,26,38,188,246,211,124,249,276,14,62,244,301,129,305,330,332,189,6,164,311,330,47,24,170,387,270,115,360,47,340,262,249,126,93,92,348,171,330,378,81,125,233,110,348,189,375,241,241,220,59,84,250,133,245,169,386,360,201,372,126,37,66,88,377,348,97},
		    {335,107,232,171,320,20,249,237,84,14,92,325,250,64,20,353,103,232,209,374,303,228,84,367,134,97,284,68,56,302,242,286,115,373,77,3,325,371,378,349,169,179,314,348,348,19,325,128,148,335,332,91,121,160,84,142,339,74,137,309,190,280,367,0,301,246,354,205,372,103,94,297,329,249,282,240,119,311,164,276,276,142,188,36,164,388,330,352,282,386,241,374,333,205,45,92,64,393,320,332,194,375,345,277,36,316,162,154,229,116,309,340,106,305,160,21,128,330,134,164,343,284,54,73,248,342,50,17,10,302,125,84,244,375,84,278,164,320,124,20,303,153,127,14,332,332,92,128,167,92,46,118,37,375,63,20,375,125,65,41,376,134,74,54,233,262,212,226,241,40,136,240,79,50,378,170,31,169,390,335,375,64,196,339,196,232,116,136,279,97,391},
		    {245,97,377,68,157,81,208,348,154,175,133,32,131,178,171,388,164,188,387,375,209,116,354,62,284,282,119,309,115,374,378,156,387,364,15,15,119,251,364,325,325,354,45,262,367,120,166,345,249,249,125,14,75,346,84,330,332,331,325,116,284,267,341,0,326,243,109,329,227,272,172,180,284,284,154,386,308,302,220,91,352,243,241,326,267,282,166,5,161,121,193,92,311,250,125,282,182,95,297,375,386,247,167,354,164,326,313,92,229,81,276,349,2,332,181,35,134,10,311,386,349,354,46,328,193,355,320,383,300,137,134,179,250,39,248,176,329,360,197,5,172,11,336,353,80,6,237,209,175,297,84,115,303,102,129,325,77,92,128,333,343,94,164,166,125,284,311,103,276,119,92,247,171,388,81,154,32,97,208,209,64,284,386,82,65,75,249,84,120,15,272},
		    {330,249,16,92,92,378,126,339,381,352,370,141,342,17,354,250,333,20,128,343,297,120,392,320,278,79,136,170,343,191,330,366,333,82,100,115,150,364,272,369,88,102,350,164,32,162,286,2,263,92,354,116,286,164,169,179,192,373,333,75,175,100,164,0,332,59,92,319,6,110,353,367,20,232,142,314,364,115,150,367,137,352,241,282,14,32,309,326,325,251,126,227,243,325,330,116,88,5,241,302,100,220,161,16,342,182,193,352,102,278,392,164,55,346,55,127,182,125,134,262,96,11,129,315,148,97,62,115,91,143,14,174,242,151,18,70,186,6,345,167,334,324,37,333,345,312,306,352,0,154,184,254,311,92,386,339,251,133,18,119,169,185,121,189,92,137,378,189,241,5,281,170,56,40,353,331,348,250,70,164,247,24,3,82,353,329,345,330,249,107,367},
		    {369,100,252,348,84,164,375,21,345,84,371,92,83,263,345,284,83,194,10,355,375,116,246,102,82,326,369,284,354,85,220,136,136,232,119,373,10,345,344,374,80,83,326,223,56,91,263,171,192,84,320,326,164,15,375,91,355,47,250,334,37,57,134,0,220,97,376,354,346,354,344,312,354,310,350,72,329,77,98,2,375,345,113,334,124,169,378,346,348,114,175,263,197,91,258,334,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {377,37,179,113,209,75,176,124,92,316,135,320,240,329,135,354,20,137,137,14,330,137,134,316,131,309,75,75,152,116,329,282,157,128,226,175,232,286,84,344,385,231,249,243,11,64,175,252,125,134,316,344,355,241,164,347,383,146,74,154,283,241,131,0,348,348,247,386,157,68,241,317,94,134,250,348,392,92,286,0,37,191,262,344,249,309,116,309,75,129,184,84,45,316,345,110,355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {233,154,186,116,350,375,329,134,68,244,80,116,350,355,332,327,284,110,40,305,331,267,172,92,116,243,343,107,47,47,348,220,345,92,164,310,147,309,309,348,316,180,334,90,310,35,92,317,372,5,220,348,223,37,375,172,352,404,14,290,385,354,329,0,136,349,309,294,128,348,117,14,350,297,120,79,128,168,345,90,133,332,332,316,181,392,354,350,175,317,332,342,348,232,378,179,330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {348,92,363,354,369,347,346,232,214,116,189,350,188,62,356,354,162,21,175,110,173,290,356,350,251,250,164,176,284,244,334,171,342,113,377,329,154,243,94,355,297,110,249,348,327,172,92,348,348,119,369,188,290,175,130,171,125,332,54,125,125,345,353,0,50,228,50,228,378,125,189,354,172,35,253,170,208,133,253,131,294,333,345,124,189,164,370,131,241,171,345,50,181,110,33,84,190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {190,84,228,250,250,197,84,345,157,190,37,83,250,190,196,196,388,0,82,120,130,101,310,315,117,152,114,37,111,348,57,330,319,196,243,369,345,186,345,356,305,345,345,345,373,373,384,24,348,186,369,345,70,175,82,193,355,50,250,371,321,378,375,0,188,5,17,320,14,371,189,373,386,97,68,82,355,32,90,241,355,305,308,286,81,326,81,64,320,376,250,283,284,284,313,330,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {122,330,345,316,294,332,162,220,329,329,148,335,110,339,327,367,216,202,386,368,92,386,92,92,37,35,35,110,344,349,335,10,363,335,386,37,345,367,311,171,171,40,251,335,349,212,133,220,46,357,354,40,348,208,367,388,250,357,345,354,75,328,348,0,54,388,63,40,130,344,110,349,183,227,328,227,345,183,173,95,143,55,171,55,249,249,17,44,110,136,335,356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
		    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
        };

        //罗马字母
        readonly static string[] _charIndex = new string[]{
            "1","2","3","4","5","6","7","8","9","10","","","","","","",
            "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20",
            "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20",
            "1","2","3","4","5","6","7","8","9","10","","",
            "1","2","3","4","5","6","7","8","9","10","","",
            "1","2","3","4","5","6","7","8","9","10","11","12","",""
        };

        //希腊字母
        readonly static string[] _charIndex2 = new string[]{
            "a","b","g","d","e","z","e","th","i","k","l","m","n","x","o","p","r",
            "s","t","u","ph","kh","ps","o"
        };

        #endregion

        /// <summary>
        /// 获取汉字的汉语拼音
        /// </summary>
        /// <param name="strChinese">欲转换的字符串</param>
        /// <param name="spaceString">分割字符串，默认为""</param>
        /// <param name="options">SpellOptions枚举值的按位 OR 组合</param>
        /// <example>
        /// <code>
        /// string strChinese = "一只棕色狐狸跳过那只狗";
        /// string result = Spell.MakeSpellCode(strChinese, SpellOptions.EnableUnicodeLetter);
        /// </code>
        /// </example>
        /// <returns></returns>
        public static string MakeSpellCode(string strChinese, string spaceString, SpellOptions options) {
            strChinese = strChinese.Replace("重庆", "崇庆");
            strChinese = strChinese.Replace("重复", "崇复");
            strChinese = strChinese.Replace("重新", "崇新");

            Encoding encoding = Encoding.GetEncoding("GB2312");

            byte[] local = encoding.GetBytes(strChinese);
            // local = encoding.GetString(local_v1);

            int i = 0;
            int index;
            StringBuilder result = new StringBuilder();
            string tmp = "";

            while (i < local.Length) {
                // 是否为GBK 字符
                if ((local[i] >= 129) && (local[i + 1] >= 64)) {
                    switch ((int)local[i]) {
                        case 163:	// 全角 ASCII
                            {
                                tmp = ((char)(local[i + 1] - 128)).ToString();

                                if (((options & SpellOptions.EnableUnicodeLetter) == SpellOptions.EnableUnicodeLetter)
                                    && !(
                                    ((tmp[0] >= 97) && (tmp[0] <= 122))
                                    || ((tmp[0] >= 65) && (tmp[0] <= 90))
                                    || ((tmp[0] >= 48) && (tmp[0] <= 57))
                                    )
                                    ) {
                                    // 控制不能输出非数字, 字母的字符
                                    tmp = "";
                                }

                                break;
                            }

                        case 162: // 罗马数字
                            {
                                if (local[i + 1] > 160) {
                                    tmp = _charIndex[(int)local[i + 1] - 160];
                                }
                                else if ((options & SpellOptions.TranslateUnknowWordToInterrogation) == SpellOptions.TranslateUnknowWordToInterrogation) {
                                    // 在罗马数字区, 不能翻译的字符非罗马数字
                                    tmp = "?";
                                }
                                else {
                                    tmp = "";
                                }

                                break;
                            }

                        case 166: // 希腊字母
                            {
                                //throw new Exception("TO DO");
                                break;
                            }

                        default: {
                                index = _spellCodeIndex[(int)local[i] - 129, local[i + 1] - 64] - 1;
                                // 无此汉字, 不能翻译的字符, GBK 保留
                                if (index == 0) {
                                    //是否翻译为问号
                                    if ((options & SpellOptions.TranslateUnknowWordToInterrogation) == SpellOptions.TranslateUnknowWordToInterrogation) {
                                        tmp = "?";
                                    }
                                    else {
                                        tmp = "";
                                    }
                                }
                                else if ((options & SpellOptions.FirstLetterOnly) == SpellOptions.FirstLetterOnly) {
                                    //是单拼音
                                    tmp = _spellMusicCode[index].Substring(0, 1);
                                }
                                else {
                                    tmp = _spellMusicCode[index];
                                }
                                break;
                            }

                    }	//end of swicth()

                    // 如果要求首字母大写
                    if ((options & SpellOptions.FirstLetterUpper) == SpellOptions.FirstLetterUpper) {
                        string _tmp2 = tmp;
                        if (_tmp2.Length > 1) {
                            tmp = _tmp2.Substring(0, 1).ToUpper() + _tmp2.Substring(1, _tmp2.Length - 1);
                        }
                        else {
                            tmp = tmp.ToUpper();
                        }
                    }

                    result.Append(tmp + spaceString);
                    i += 2;

                }
                else {
                    // 在 GBK 字符集外, 即半角字符
                    if (((options & SpellOptions.EnableUnicodeLetter) == SpellOptions.EnableUnicodeLetter)
                        || (
                        ((local[i] >= 97) && (local[i] <= 122))
                        || ((local[i] >= 65) && (local[i] <= 90))
                        || ((local[i] >= 48) && (local[i] <= 57))
                        )
                        ) {
                        result.Append(((char)local[i]).ToString() + spaceString);
                    }

                    i++;
                }

            }

            return result.ToString();
        }

        /// <summary>
        /// 默认转换，首字母大写，不分割
        /// </summary>
        /// <param name="chineseString"></param>
        /// <returns></returns>
        public static string FullConvert(string chineseString) {
            return MakeSpellCode(chineseString, "", SpellOptions.EnableUnicodeLetter | SpellOptions.FirstLetterUpper);
        }

        /// <summary>
        /// 默认转换，首字母大写，空格分割
        /// </summary>
        /// <param name="chineseString"></param>
        /// <returns></returns>
        public static string Convert2(string chineseString) {
            return MakeSpellCode(chineseString, " ", SpellOptions.EnableUnicodeLetter | SpellOptions.FirstLetterUpper);
        }

        /// <summary>
        /// 默认转换为首字母(均为小写)
        /// </summary>
        /// <param name="chineseString"></param>
        /// <returns></returns>
        public static string FirstLetter(string chineseString) {
            return MakeSpellCode(chineseString, "", SpellOptions.EnableUnicodeLetter | SpellOptions.FirstLetterOnly);
        }

    }


}
